/coding-nerd-notes

Taking notes is my way of learning, and remembering, things!

Coding Nerd Notes

A Trip Down the Memory Lane

Phase 1: Love at first sight!

  • My very first programming language was Fortran, back in 1991. This was in my 2nd year of college, where I was pursuing an undergraduate degree in Mechanical Engineering. It was ❤️ at first sight. To say that Fortran is the reason why I eventually switched my major and career to Computer Science would be 100% accurate.
  • In my final year of college, I took a course where I got exposed to COBOL. I can't say the language did anything for me. As a matter of fact, I am still not sure I understand why the language was such a huge commercial success, especially in business/finance. Perhaps some day I will care to actually understand 😉
  • In fall of 1995, when I moved to States to pursue my Masters in Industrial Engineering with a focus on Information Systems, I built my first web site using HTML.
  • Perl/CGI development came soon after in Spring of 1996. After Fortran, Perl was the next language that truly got me excited! Perl by Example was my go to book to learn as much as I could about writing backend code for web apps. It all seemed like magic. I was hooked. For life!
  • During my Masters program, I took two courses that made me write tons of C++ software. And yes, I learnt and wrote C++ before I even wrote a single line of C. To say that I got pretty good at it would not be a hyperbole. However, lack of access to Unix-based desktop meant I would have to learn C++ on Windows. MSDN subscription cost and not getting easy access to Visual Studio definitely impeded my plans around C++. That said, I think the prospect of understanding and dealing with Microsoft Foundation Classes (MFC) and DLLs scared me away from C++! I continue to fantasize that some day I will go back to learning and writing LOTS of C++ software. We will see if that happens 😄
  • In Summer of 1996, I got my first exposure to serious Unix when I became a co-System Admin for an IS Lab in ASU's College of Education. While it was just a summer job, I had in my full possession an SGI Workstation with admin access. The roots of my ❤️ for all things Unix can be traced back to the excruciatingly hot summer days of 1996.

Phase 2: Web Applications and Web Services Developer

  • Summer of 1996 is when I had my first date with Java and JavaScript.
  • From 1997 to 2004, I did a lot of [Java] software development running it on servlet containers like JRun, Borland Inprise, Tomcat and IBM Websphere. In all cases, the context of my development was for Web Apps, although it later switched to being more and more for Web Services. This meant I spent most of my time writing Java Servlets and a bit of Java Server Pages. I never got comfortable with running JBoss and hence, never got into writing much of any Enterprise Java Beans (EJB).
  • While I was always a backend developer, I did not completely ignore the web frontend space. I did get myself fairly competent with CSS and dealing with the DOM using JavaScript. That said, the nuances of making JavaScript work in the browser in late 1990s to early 2000s was nothing short of painful. Upon reflection, these challenges with making JavaScript work was such a turn off that I never really got into JavaScript. JQuery was definitely a welcome introduction in the world of JavaScript, just like Spring framework was in the world of Java Stateless and Stateful Enterprise Java Beans (EJB).
  • During this time, I did dabble a little with Active Server Pages (ASP) and a decent amount of PHP. Most of my PHP work was driven by my interest in running a blog for me and my dad powered first by Movable Type and then later by Wordpress
  • My ❤️ for Unix morphed into me finding the red fedora! Yes, I was a HUGE FAN of Red Hat Linux in the early days. I remember driving to Borders bookstore in Miliptas, California, to buy the latest RedHat Linux CDs. I did everything from compiling Linux kernel features to fantasizing that it will become my primary operating system someday.

Phase 3: Software and Solutions Architect

  • Someone in Cisco Systems thought I was quite good in Microsoft PowerPoint and Visio, not to mention "talking"! They made me an IT Architect in 2005.
  • This role allowed me to look at designing and building "solutions" for our internal and external customers at Cisco. I was quite miserable at first as it seemed like the role took me away from writing software, the one thing that I actually enjoyed! In hindsight, it was perhaps the best thing that happened to turning me into an all-rounded IT professional.
  • The following list covers some of the bigger initiatives that I have gotten involved in over the years as an IT Architect:
    • Cisco Developer Network (CDN): Building Cisco's very first stab at creating a true software development community using social computing tools like blogs, vlogs and wikis. You can draw a straight, and quite short line, to Cisco's DevNet community today from CDN! While the branding has changed from CDN to DevNet, the domain developer.cisco.com that we picked has not 😄
    • Migrating Cisco IT Apps to Metro Virtual DCs in Texas: Infrastructure, especially Compute and Network, became an obsession of mine for a number of years leading up to 2010. Why? Cisco was moving their entire IT compute footprint from bare metal servers in a few campus buildings in San Jose to two Tier 3+ DCs in Texas. This was my first exposure to the world underneath an operating system! I tried soaking up as much as I could - server virtualization, hypervisors, data centers, challenges of data centers, need for redundant power supply, cooling, ISP connections etc. I even got a chance to visit Cisco Webex's main data center in Mountain View! Plus, it certainly did not hurt that Cisco decided that it was going to move into the Compute space with the launch of Cisco Unified Compute System (UCS) line of Blade and Rack servers!
    • Enterprise App Store for Cisco Cius: In the early days of iPad, everyone was angling to see if there was a business opportunity to be had inside an Enterprise using this novel device. Cisco's Cius was an Android-based laptop meant for Enterprise use. We worked on trying to put together an App Store for Cius. While the implementation of the store came quite a bit further along in a very short amount of tiem, the actual tablet as a product never really took off. And neither did our App store 😉
    • Empowering Cisco Partners via Web APIs: Amazon's success with AWS using Web APIs clearly showed Cisco could do a lot better in empowering our partners and possibly opening up new revenue streams. Using Mashery's amazing API Management platform, we built quite an impressive looking API portal for our partners, one of the first AWS hosted Cisco IT solution of the time. Implementing our first API Management solution, and Mashery's first hybrid implementation of their API Management platform, meant that I got into the weeds of all things Web API and Identity and Access Management (IAM)! Things like Single Sign-On using Security Assertion Markup Language (SAML) Federated Identity Providers, OAuth 2.0 (for securing our Web APIs), XACML and, last but not least, REST APIs!
    • Cisco IT Mobile Apps Software Development Kit (SDK): Over the years, Cisco has built many value-added software on top of the Commercially available off-the-shelf (COTS) enterprise softwares that we purchased. For better or worse, these two pillars have powered Cisco's ~50 billion dollar business. With the explosion of mobile apps in the consumer space, there was a sense that developing mobile apps would explode within Cisco IT as yet another channel of driving productivity for both internal and external customers. While the effort never really morphed into anything significant, it allowed me to dive even more into the world Identity and Access Management (IAM). Why? Of the many things we tried to do to make mobile app developers productive, our most successful offering turned out to be two SDKs, an Objective-C (for iOS apps) SDK and Java (for Android apps) SDK, that made it trivial for teams to integrate Cisco Single Sign-On (SSO) in their mobile apps. As for writing mobile apps myself, despite me spending the most amazing 5 days of my programming life writing Objective-C during days and late evenings at Asilomar State Beach, thanks to Big Nerd Ranch Bootcamp, I never really got into it.
    • Transforming Software Delivery Experience: As I alluded to earlier, Cisco IT teams do write a lot of software. If you extend it out to all of Cisco, the number of Software Engineers writing code is quite impressive. However, prior to 2015, software delivery experience across Cisco was extremely fragemented with many teams, especially in IT, living in the Paleolithic Age of software delivery: write software for many weeks with little to no visibility into the voodoo acts that went into doing that, then throw it over the wall for another group to perform testing on their output followed by a final elaborate "ceremony" on a preordained day (really, night) when the bits-n-bytes were pushed into Production with much fanfare! In 2014, a major initiative was launched to transform our software delivery by embracing CI/CD. Our goal was simple: Empower Cisco IT teams to deliver high-quality and secure software at speed! In other words, make releasing software a non-event I have spent the last five years obsessing about every aspect of Cisco software developer's experience.
      • Providing an integrated CI/CD Pipeline: We offered Git as a DVCS, Jenkins as a Continuous Integration tool, Artifactory as an universal artifact manager and UrbanCode Deploy and Release (later, Spinnaker) as deployment/release pipeline tool.
      • Providing a Cloud and Tools agnostic Software Developer Experience:
        • A Control Plane that allows delivery teams to create (or edit) an end-to-end CD pipeline CD stack regardless of the nature of the tool involved and its location (on-premise or clouds)
        • A Release Plane which allows delivery teams to schedule or perform on-demand software releases to pre-configured runtimes, while complying with all security and compliance controls
        • An Analytics Plane which allows teams to get access to rich analytics about their software development practices as well as Software characteristics like code quality and security metrics.
  • While I have continued to dabble with writing software during my time as an IT Architect, these were small utility softwares created to get a specific task(s) automated. To no one's surprise, I got into writing more and more Python during this time. Since Python and Perl were peers, at times I wondered if I should have embraced Python instead of Perl during my CGI writing days. That said, I really enjoyed my time with Perl. So, no regrets there. 😄

Phase 4: This time, it's personal!

If this trip down memory lane has not made it ample clear, I got into Computer Science because I wanted to! However, for better or for worse, the things I learnt (or more importantly, did not learn enough) was driven by more mundane needs of getting a job and surviving as an immigrant in US.

Now that that's not a pressing issue, I intend to circle back and dive into all the nooks and crannies of this discipline that I missed last time around. Not to mention some shiny new toys 😄

  • Modern Java is a lot more fun than the Java of late 1990s. Lambdas, Streams, New Data and Time API and fun frameworks like Spring Boot or libraries like Lombok are things that I have gotten quite familiar with. That said, I intend to go a lot more deeper into these. With IntelliJ IDEA, of course! My ❤️ affair with Java started 24 years ago. And it's still going strong.
    • I got upclose and personal with C++ back in Spring and Summer of 1996. However, instead of diving into C++ 20 today, I've decided it is time for me to move on. I have heard good things about Rust, although Go's dominance in Enterprise DevOps space might sway me towards it. Let's see how it plays out.
    • Julia intrigues me. I have been told that folks at NASA use it quite a bit. Perhaps, Julia will bring me back full circle to a language like Fortran, especially for Scientific Computing use cases!
  • Computer Science-y stuff
    • Design Patterns
    • Object-Oriented Design
    • Data Structures & Algorithms
    • The Hardware/Software Interface: Inside the Machine
  • With Python's dominating presence in the AI/ML space, there is no getting around it. It will hopefully lead me to the world of Software 2.0.

References: