Part one of this series talked about some of the processes involved in writing software in industry, but what about the cool stuff? What about technologies?
When I was in school, I had two entire quarters of data structures and algorithm analysis. There I learned to code linked lists, hash tables, heaps, queues, etc. And I learned to analyze them and distill them down to their Big-O performance profile.
And in seven years of software development, I have never written or analyzed a data structure like that again. Definitely, the knowledge I gained from that class has informed much of what I’ve done, but actually writing linked lists myself is a thing of the past.
There’s much more to software development than just pure computer science. Even though you’ve spent 4 (or more) years in school learning abstract technologies, there are certain applied technologies that nearly every recent college grad needs to know but usually hasn’t yet been taught.
1. SQL and Relational Databases. If you are getting a job writing business software, then you need to know this backwards and forwards. And I’m not talking about just MySQL; you should download and play with one of the developer versions of Oracle, Sybase, or Microsoft SQL Server and familiarize yourself with them. You should understand what an index is, when to use them and why you can’t just use them everywhere. You should understand joins. You should understand data modelling and normalization. And of course, you should know the syntax for basic select, insert, update and delete. It also doesn’t hurt to familiarize yourself with the database layer of one or more programming languages like JDBC (Java), ODBC (C++), or ADO (.Net).
2. Graphical User Interface (GUI) libraries. Sure, you know Java, C#, C or C++. But one thing I’ve come to realize is that knowing the basic syntax of any language is easy, but getting to know the libraries people use to write useful software in that language takes a very long time. A good place to start is with the GUI libraries because most (but admittedly not all) software needs to interact with actual users in one way or another. Some examples are: MFC (C++), Swing/AWT/SWT (Java), Win Forms/Web Forms (.Net), HTML/Javascript/AJAX (various).
3. Distributed computing. Businesses, especially large ones, tend to have their software infrastructure spread all over the place. Different development teams have different schedules and have made different technology choices. Additionally, some businesses have a real need for scale as far as the number of transactions they can handle at the same time. These two needs are really what has spawned a whole bevy of distributed computing technologies over the years. The latest that you should familiarize yourself with are Enterprise Java Beans (Java) and web services (various, especially .Net)
4. Unit testing. JUnit, NUnit, PHPUnit, or any *Unit will do. They all evolved from JUnit anyway. You’ll never really realize how valuable a full suite of automated regression tests is until the very first time you have to refactor a big piece of existing software. After then, you’ll never forget how valuable they are. Automated unit tests are also at the heart of Agile development, which is all the rage these days.
Not sure what Agile development is? Stay tuned for part 3, which will introduce some development methodologies.