I am looking for specific recomendations of what to teach myself before the second year of my computer science degree.

8    07 Jul 2016 23:12 by u/mynameispiff

First year we worked primarily with Python and Java. We did a bit of web scripting (HTML, CSS, XML, PHP, Javascript) and some assembly code in MIPS. I figured I couldn't go wrong with teaching myself C, but I wanted some input on the matter. I know the titles of the second year courses I am taking, but only titles. If you have the time, give them a glance and see if there is anything that jumps out as you, e.g. "Oh, you're taking a course in X! Definitely look into the language Y and the concept Z". The courses I am taking are:

* Software engineering * Operating Systems * Databases * Introduction to information security * Systems Programming * Algorithms and complexity * Computer and network security

6 comments

5

Do project work. Write programs to generate cool pictures. Write a game. Write a web server. Update your web page. Get an Arduino and build a line-following robot. Pick something that fascinates you and excites you, and get your hands dirty. The best way to learn software development is by doing, and the best way to learn design is to run through the whole project lifecycle over and over and over again.

Edit: Also, and maybe most importantly, pick up one of your old projects after a few months. Look at it with fresh eyes, see the mistakes you made, how you could have done better. Brush it up so it's as good as you now can make it. Repeat this with the same project every few months. The best way to learn to maintain code is by doing so.

3

Math will help you a lot, both in making your algorithms and complexity courses more natural to you, and helping you to look at problems more formally. You could brush up on Calc, algebra (linear and general), and looking at "real analysis" will help you assimilate (that is, learn such that they come naturally) proof techniques (with a bonus of making you good at formal logic).

If you include a diligent look at the above in your prep, you'll be lightyears ahead of many of your classmates, and you'll enjoy your classes a lot more.

I should add too: for your database courses, working on your own small projects in something like mysql will go a long way. Mysql is open source and you can get a version of it for about any OS. There's a good (and not too thick) O'Reilly book that does a fine job of an intro to using Mysql.

1

Lisp.

1

Since you know some python and are interested in C you might want to consider the tk framework. Tk has a cross platform C API and you can embed interpreters in your software with it. It's handy and BSD.

Your classes would give you a lot to work with in regards to single board computers as well, so if you're looking for more recreational things to do with them maybe consider programming some music with Chuck, pure data, super collider, csound, or Faust.

1

Personally, I would pick a language, preferably one used in the job market (I'm a Java guy, so I'm biased toward that, lot's of jobs there), and just program, everyday, learn as much as you can about it. The time will help all the other stuff you're learning percolate and internalize, and if you're tenacious, you could walk out of college with enough skill in something to breeze through your first junior level interviews.

For a junior, anyone who sounds like they have some level of command of the language and seems like they'd be alright to work with on an interpersonal level is pretty much in. If you show that your'e eager to learn you'll fly through.

I am partial to programming, but if you're looking more into the hardware side of things, or administration, my advice would be the same, start building up environments with openldap, databases, setup SSH between boxes and fiddle with security, the more you are familiar with the better, and those practical skills are what you'll actually use every day in the working world (where you'll really gain massive valuable experience).

1

@tame has the real recommendation, but you seem concerned about you classes so here are some projects or reading topics that would give you mastery in your next classes. A lot of ths might not make sense ill the end of next semester

Databases: Make a mockup website for a store with a backend database that includes products and user shopping carts, i.e. try to think what a amazon or such database should look like to be scalable from five products to five-million. Database should be Boyce-Cod Normalized. Diagram the database before you start the project. (This is a valuable skill for any new project)

Operating Systems: Review your C or C++ enough that you can use OS semaphores for thread control. Asuming a unix server for the projects keep die.net man pages in your bookmarks.

Algorithms and Complexity: Regex learn what properly is part of a regex as Deterministic finite automota, how does that differ from a context free grammer, what makes a system touring complete? If you read scifi you've probably theard how P=NP would break cryptography, understanding that question and being able to classify a set of written instructions into one of the formal complexity bins is a lot of the class, that and operating the problems.

Systems Programming Not surge if this is your assembly course or not, if it is start building simple assembly programs. Learn to do hex in your head and get a hex calculator if the class has quizzes and allows is.

Security classes: Do you know your 7 layer OSI model? Can you explain asymmetric key encryption and how that differs from non-repudiation signature of a asymmetrically signed email.

Systems Engineering: Long documented group project, demonstrating how to get the cutomer to give you programmable requirements. If you get to pick teammates start picking now. You should learn to chant MVP (Minimum Viable Project)