• Welcome to Computer Association of SIUE - Forums.

Things I wish I had known my freshman year

Started by Robert Kennedy, 2010-04-22T23:01:34-05:00 (Thursday)

Previous topic - Next topic

Robert Kennedy

At the Caos meeting today I mentioned that I hadn't really even heard of Version Control until my Junior year in 325, and someone else chimed in and said that they were the same way.  Even then I didn't really fully understand the use of it, and my 325 teams proceeded to email source code back and forth anyway.  It did get me thinking about all the things that I've had to learn on my own, that are necessities in industry, and aren't really taught all that much at SIUE.  If there happen to be any Freshmen or Sophomores out there, here's a list of things that you might want to look into in your spare time that are scarcely touched upon at SIUE.  Some of the things I'm listing I am still learning as well, so don't consider me to be a subject matter expert.

Version Control - It was touched on today, and there are plenty of resources out there to learn exactly how to use each version control program.  I don't think I can explain Version Control any better than Wikipedia http://en.wikipedia.org/wiki/Revision_control

Unit Testing - Essentially this simply involves the use of "asserts" in order to automate testing of your code.  The simplest example would be if you had a function that added two numbers together, you would have a line in your test function that said something like assert(add(3, 4) == 7).  Although this may seem trivial with this example, in large projects if you have an automated test of each function, it makes it much easier to find out where your program is screwing up, and helps you find out when one change results in an unexpected outcome somewhere else in your code.  There are entire unit testing suites out there, but I still haven't got around to trying them out yet.  http://en.wikipedia.org/wiki/Unit_testing

*nix - I hadn't used anything but Windows until my first Career fair when almost every potential employer asked me if I had any experience working with a Unix Terminal.  Although most Linux Distributions these days do have a gui application for everything, you do still get some experience with it compared to doing all of your development in Windows and VS.  Also, if you were at the meeting today, you saw just how fast you can actually do things in a terminal once you do learn your way around when Mark took control. 

Non-Visual Studio Development - It was CS314 before I found out that there was a way to compile files without having a big green arrow in my IDE that said "run" when you hovered over it in VS.  Learn how to use Make, and try out some of the other IDE's out there.  I like Netbeans personally, along with a good text editor like Notepad++.  Vim is probably something that would be useful to learn as well, but I've never quite got around to that.   

If any of the alumni out there that follow these forums could add a bit to this list it would be greatly appreciated.  I'm just writing the things that I've picked up in the last year or so that would have been pretty useful if I had known about earlier on.  I'm sure there's more that you learn once you enter the workforce that made you say "man I wish they had taught that in school". 

Brent Beer


Mark Sands

Excellent post.

Version control yes. If anyone wants to toy around with version control, grab an account at one of these sites: http://beanstalkapp.com, http://github.com, http://bitbucket.org They'll handle svn, git, and mercurial respectively.

I would love to give a talk on unit testing but I've honestly only hardcore done it in Ruby. Boost has a nice unit testing library for C++ and Google has a testing library as well, and I know Objective-C has the SenTest framework. That's really all I've ever played with. If anyone knows any expert on it, have them get in contact with us. It's a great thing to have under your belt.

Unix. Sure, we have a preference, sure there a lot of local .NET shops, and sure using only windows is simply fine and dandy. That works. But if you want to truly be universal and be a "CS Major" then you need to know Computer Science. No one's forcing you to like it or use it, but at least be familiar with it. Who knows, maybe you'll end up liking it.

Visual Studio is bittersweet for me. It does do some amazing things, though. I personally prefer writing my C++ code for school assignments on my mac using preprocessor macros to make it compile on all platforms. Then move to visual studio to make sure I did it right before turning in the assignment. I'm even able to use Rake (kind of like Make but for Ruby) to compile my C++ code on my mac. Doing this gives me experience with new C++ idioms, multiple languages, and developing cross platform code. I suggest everyone try it out; it's actually pretty fun.

On a related note, if anyone wants to be added to the *new* caos mailing list, message me or email siuecaos [at] gmail [dotcom] and I'll add you. :)
Mark Sands
Computer Science Major

Robert Kennedy

Mark does bring another thing to mind that I had forgotten about. 

Libraries - Aside from programming languages, there's also various libraries that you could learn.  For example, boost is a library of functions that extend the STL.   The boost libraries have virtually every popular algorithm implemented, but are impressively complicated.  In many cases it is easier to just implement your own version of an algorithm rather than figuring out how to use the Boost implementation of it.  There are many other libraries out there to tap into to make projects easier.  If you like C++, but don't like the difficulty of setting up a GUI in C++, check out QT (also QT Creator is a pretty decent IDE).  QT GUI tools are cross platform, so I do believe that the same code will compile in Windows, Mac, and Linux, and any GUI's you create will have the native features of whatever platform they're compiled in (for example, minimize, mazimize, close in the top right corner of your screen in Windows.)