New Year Resolution: Technical

Inspired by Professor Matt Might, I decided that in 2017 I am going to try to round out some of my technical abilities. Part of this is driven by the fact I am starting a new job in February that will focus more on software and less on hardware.  As such, I am going to try to focus on learning a new type of technology concept each month. What are my strengths? C++, bare-metal development, software-hardware interface, FPGAs, embedded, etc. What are my weaknesses? Databases! Virtualization! Web!

Update! It was a dumb idea to try to plan all of this…graduate school has been brutal and consuming my life…VLSI physical layout is a very time consuming and drawn out process!

I have made no progress with NoSQL, I could not keep up with the online MongoDB course while trying to keep up with the course load on my other grad school courses. As such, I’ve mostly just been learning RDBMS and SQL slowly during lunch breaks at work and some occasional late hours at night when I get the itch. I’ve also been messing around with iSCSI, which I have to admit I find more interesting that databases!

Anyway, I’m going to revisit all of this in May when I graduate and am done with my academics. I still think the below list is very valid, and I should be able to at least mark off the RDBMS and SQL aspects by May.

  1. January: NoSQL (via MongoDB)
  2. February: NoSQL clients (via Python, Pymongo, and MongoDB)
  3. March: RDBMS and SQL (via IBM DB2)
  4. April: ODBC for RDBMS (via IBM DB2, C++, Python)
  5. May: PKI and Authentication (via MongoDB and OpenSSL)
  6. June: Virtualization 1 (Linux KVM)
  7. July: Virtualization 2 (Linux+Xen)
  8. August: RESTful web services back-end (C++ and  Casablanca library, Python)
  9. September: RESTful web services clients (Node.js or Django)
  10. October: Web-based GUIs (Angular+Node.js or Django)
  11. November: GPU programming basics (Nvidia CUDA)
  12. December: GPU programming (more) (Nvidia CUDA)

I thought about adding DevOps tools into the mix, but I think I am sure I am going to pick up a lot on the job in that area, as well as it would probably help to get a better grasp of deploying virtualization beforehand.

Let’s see how it goes! So far I have MongoDB installed and I am working through the intro course with python at MongoDB University.


Reflections on the Ada Language

I go through periods where I have a crave to learn new programming technology.  I’ve tried Java in the past, but in the end I fell back on C++.  Same thing for Python and Haskell–the syntax (sorry, freedom with white-space is just a personal preference!) and lack of familiarity with the libraries led me back to C++.  But sometimes I want to try something new and feel that “wow” moment when you really appreciate a new way of doing something.  So far only Erlang has managed to cause that reaction.  I still need to have a go at Eiffel one of these days.  The software engineering aspect of Eiffel looks really interesting.

Speaking of software engineering, I have always been interested in evaluating Ada and understanding the how and why it is known for safety and reliability.  I have been trying to make myself more comfortable with Ada since my days in the university.  After all, unlike Java, C# or many modern languages, Ada is not managed and I can use the GNU tool chain for development and debugging.  Yet somehow Ada never sticks to me–I don’t know why.  Ada is used in some of the most interesting software in the world: avionics, rail transport control in the EU, satellites, and more.  Even with such an impressive track record, I still find it difficult to buckle down and really go at Ada!  Those applications are so much more interesting that what I currently work on.

Whenever someone in the Ada community publishes and article about the strength of Ada in software engineering and the lack of developers who know the language, I get the urge to try and pick it up again.  I really want to understand what makes it so well suited for mission critical applications, yet when I start reading a book on Ada, I loose interest in a few days.

One major factor may be that I cannot really use it in my job. I could, but my boss would probably throw a telephone book at me if he wanted to update my software and found it was not C, C++ or C#.

I just cannot put my finger on it though.  I don’t mind that Ada is a verbose language–it helps to keep my C/C++ style of thinking out of any Ada code.  Reflecting on my FPGA designs, when I write Verilog (required at work) I sometimes catch myself writing it like a C program.  I never had that issue with VHDL (from my school days)  because the syntax is just so different from C–in fact, VHDL is based on Ada.

So why the personal trouble with Ada?   Am I just not motivated enough?  Perhaps.  Honestly, I think the biggest hurdle for me with Ada is the constant reference to the ARM, the Ada Reference Manual, in Ada learning materials.  I understand that the ARM is a “contract” and Ada programmers should refer to it when it doubt.  However, it has to be the driest reading I’ve ever attempted–even my undergraduate electromagnetics textbook was more interesting! In “Ada for Software Engineers”, I can feel myself nodding off whenever a reference/quote is made to the ARM.

Perhaps the reverence for the ARM is the difference between Ada and other languages.  When I first learned C++, I learned little-by-little, and as I gained more experience and felt more confident in my ability to write C++, I could then attempt to read Stroustrup’s C++ book and Lippman’s C++ Object Model book.  I was at the level where I really could understand C++ and I could understand how it worked under the hood.  Perhaps I should try some other Ada books, I don’t know.

Nonetheless, I still toy around with the language during downtime.  I often wonder if there are there any interesting open-source Ada projects out there?  It always helps to see how a language is applied.