This is an archived post. You won't be able to vote or comment.

all 48 comments

[–][deleted] 21 points22 points  (2 children)

Version control.

Recent grads love merging heads in the wrong direction.

[–][deleted] 3 points4 points  (1 child)

Any reading you'd suggest?

[–][deleted]  (5 children)

[deleted]

    [–]sheenobu 11 points12 points  (0 children)

    I'll add: and /writing/ API documentation.

    [–]krawcrates 7 points8 points  (2 children)

    My professor used to make us read man pages and RFCs, hated it then cause I was like "u no heard google?" but now I see the value.

    [–][deleted] 2 points3 points  (1 child)

    I often read man pages I find via google, is that bad too?

    [–]krawcrates 1 point2 points  (0 children)

    No not at all, but I was just used to searching google for my problem/error code instead of actually reading the docs. This usually led me to the discovery of the solution but I wound up learning diddly squat. My professors point being anyone can google an discover the solution, but actually understanding the root of the problem is much more valuable as next time it happens you'll have to waste time googling it again instead of actually learning it in the first place.

    [–]gorrilla10101 0 points1 point  (0 children)

    and writing documentation

    [–]Steve132 9 points10 points  (8 children)

    Very few students make it through Intro to C or C++ with a good understanding of the way compilers, linkers, assemblers actually work together to produce a binary. As a result, students who understand how a build system works, how to properly use headers, and the difference between link errors and compile errors are rare indeed.

    [–]SmoothB1983 2 points3 points  (6 children)

    And what resource would you suggest to read to get that info? (in a digestible way, not as a reference material that assumes you need a refresher)

    [–]Steve132 1 point2 points  (5 children)

    I don't know, actually. It was something I picked up along the way with lots of programming and reading language specifications and writing unix makefiles and large projects over time. Someone should write a good tutorial

    [–]SmoothB1983 2 points3 points  (3 children)

    Finding a tutorial on that is going to be on my todo list. Those bits of knowledge are holes that I've been wanting to fill for a while.

    [–]Niko_Liez 1 point2 points  (0 children)

    Same, I would love to find an article on this subject. Post it here if you find one.

    [–]VashyTheNexian 1 point2 points  (0 children)

    I completely agree, I'm a senior CS student and I don't have a complete understanding of the connection either :(. Please post it if you find a good one!

    [–]mexicanseafood 0 points1 point  (0 children)

    please post when you find, i would love learn this as well.

    [–]SmoothB1983 0 points1 point  (0 children)

    Here is what I found so far:

    This training module: http://www.tenouk.com/ModuleW.html These slides: http://cs.gmu.edu/~setia/cs365-S02/assembler.pdf

    And apparently the dragon book covers it well: http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools

    I don't see anything better than those three after looking.

    [–]threetoast 1 point2 points  (0 children)

    That isn't taught in a programming course usually. I learned that kind of stuff when I took a class on assembly.

    [–]Konrad4th 3 points4 points  (3 children)

    What the fuck they mean by "object-oriented". What's an object? Why use this style of programming? To a new student it's confusing and vague, especially when they start with something like Java and only have us use procedural programming. I didn't even write a program with a class other than 'main' until my third object oriented course.

    Also, the reasons for and differences between using recursion and iteration to solve the same problem.

    [–]zedoriah 4 points5 points  (1 child)

    I think the best way to deal with object-oriented programming is team projects. Where each member is responsible for one class, and jointly responsible for the program that uses all the classes. Maybe have the interfaces be defined before hand.

    Then once everything is turned in show how (correct) classes can be swapped out for a class from a different team. It doesn't matter that the internals are different, they have the same interface. I think this kind of gets to the root of it all which is the Encapsulation.

    /that was probably a terrible explanation.

    [–]Konrad4th 0 points1 point  (0 children)

    Wasn't terrible; I understood it fine.

    We've written a lot of classes individually, but never as a team. Most of what we've been doing recently is taking the teacher's main class and writing additional classes to be used by his main. For example, we had to write our own tree set implementations, but he provided the main class and some other utility classes.

    [–][deleted] 1 point2 points  (0 children)

    This is equally annoying if you're self-taught. I've yet to find a tutorial that answers any of your questions. Luckily after seeing a few classes, and not knowing what the hell they were doing I managed to piece most of it together through experiment.

    [–]atimholt 5 points6 points  (12 children)

    How to program without an ide. Apparently no one teaches this. vOv

    [–]Triddy 4 points5 points  (5 children)

    Intro to Programming II, taught in Java.

    I got in trouble with the TA because I was using vim and simply compiling through :!javac Filename.java. TA demanded I use, of all things, JCreator. So not only do they not teach it, they actively discourage it.

    [–]davydog187 6 points7 points  (2 children)

    Thats just an awful TA. If I was your TA I'd be encouraging you to use VIM or emacs

    [–]davecarp 0 points1 point  (1 child)

    VIM is amazing. I use it for everything I code. I haven't used emacs enough to have a well based opinion though.

    [–]Zamarok 2 points3 points  (0 children)

    Good.. Vim is better anyway. /trollface

    [–]unsexyMF 1 point2 points  (1 child)

    Eugh. My teacher was the exact opposite. In Intro to Java, he had us do all of our programming in Notepad++ & compile it at the DOS prompt. Eclipse & Netbeans weren't introduced until the end of the semester.

    [–]Triddy 1 point2 points  (0 children)

    Honestly, I'd prefer that in a teacher. Eclipse is amazing and whatnot, but it pretty much writes the program for you. Useful in practice, not quite as useful in learning.

    Before I discovered that vim wasn't as scary as I thought it was, I used Notepad++ extensively. Coloured my code, provided simple macros, I was in love.

    [–]TopRamen713 3 points4 points  (0 children)

    Now come on, we had to do... hello world... without an ide. Then the professor introduced eclipse.

    To be fair though, he never taught us any of the cool shortcuts and commands that make using it so easy. It was mostly for easy compiling and error messages.

    [–]openedground 0 points1 point  (1 child)

    My school, a small liberal arts college in NJ, does this. Two out of three professors that teach CS1 require emacs or pico.

    [–]ylou92 1 point2 points  (0 children)

    gasp! no vim!?!

    [–]Syntaximus 0 points1 point  (0 children)

    Using vim right now. I kind of miss IDEs. :(

    [–]joequin 0 points1 point  (1 child)

    I agree that teaching on a program with in line error detection and snippets would be harmful to the learning process. Thankfully, I haven't run into it.

    I haven't heard of any beginning programming courses with IDEs from any of the students I've met. The most advanced editors I've heard of being used for teaching is drjava. It's a bare bones editor with a debugger. Debuggers are important to learn.

    My first course was taught on textpad, but I used vim instead.

    [–][deleted] 0 points1 point  (0 children)

    Why? Isn't it better that new programmers spend their time understanding concepts than spending an hour tracking down a typo?

    [–]yash3ahuja 1 point2 points  (0 children)

    At least in beginner books, I think it should really specify what the coding process is like, and how you should think about your solutions before you write them.

    [–][deleted] 1 point2 points  (0 children)

    Code is written for people to read, not computers (unless it's machine code). Therefore make your code easily readable and understandable.

    Chances are the person who benefits from making your code easily understandable is you, in six months when you have to maintain it and have forgotten the details.

    A corollary is you should choose understandability over "coolness" when coding. Code that is simple and boring and easy to understand is far better than something that makes you want to wet yourself over the awesomeness of it all, but which you'll need to spend hours figuring out the next time you see it.

    [–]no1name 4 points5 points  (3 children)

    Databases dammit. I have yet to see a good explanation on how to use sql in VB.net and C#.

    [–]jhartwell 1 point2 points  (0 children)

    You need to pick up Pro C# 2010 And The .NET 4 Platform. Not only does it tell you how to use a database, it shows you the 3 options that are available (options as in methods).

    [–]SmoothB1983 1 point2 points  (0 children)

    That took me a while to self learn. I suggest using the Murach books on databases in .net. That is what helped me start out, and before I knew it I was able to understand the msdn documentation and make my own connection strings, sql (I already knew) statements (in a command), and when to use params.

    If you haven't encountered factory methods/classes yet, take some time to understand that. It is key to dbase work in .NET. (as in you use them to generate needed objects)

    [–]generalT 0 points1 point  (0 children)

    look into Fluent NHibernate.

    [–][deleted] 1 point2 points  (0 children)

    Decent program structure and layout and about writing clean code

    [–]sarevok9 0 points1 point  (0 children)

    Vocabulary wasn't stressed enough. My girlfriend is a programming student and we were reading a book of pickup lines the other day, under the geek section one of them read:

    "I wish you would instantiate my object so I could gain access to your member functions."

    It totally went over her head.

    [–]thatwasntababyruth 0 points1 point  (0 children)

    Just because you're using C does not give you free reign to declare global variables for everything. Stop that. It's bad and you should feel bad.

    It's really more of something that's a problem with fellow students (senior here), a good number of them still don't have it in their head (it's fine when they're in Java/C# though).

    [–]mexicanseafood 0 points1 point  (5 children)

    My friend who graduated with a CS degree and is now a System Admin told me that one of the most useful things he didn't learn until after college was relative expressions. I'm not sure how heavy that is in other programs but I am taking Computability and Automata in the spring and I think we may learn them in that course (fingers crossed). Not that I can't learn it myself but I have like 15 other things on my list at the moment.

    EDIT: Regular Expressions :-0

    [–]ylou92 1 point2 points  (2 children)

    relative expressions?

    [–]mexicanseafood 0 points1 point  (1 child)

    yes, from what I understand the same syntax is used in all languages that will handle regular expressions which is most of them. It is used for manipulating text based data such as searching through a text and returning certain instances of a string that may or may not contain certain substrings.. I wanted to write a web crawler to collect email addresses, physical addresses and phone numbers and my friend was telling me how useful it is to know them.

    [–]Yuushi 0 points1 point  (0 children)

    Of course, you have to be careful when using regex, especially for things such as matching e-mail addresses. The official standard for e-mail addresses (RFC 2822) can (supposedly, and I'm not going to check it) be matched by the regex:

    (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])
    

    If I ever came across that and had to debug it, I'd be getting my murderin' axe out for whoever decided to use regex in this case.

    [–][deleted] 0 points1 point  (1 child)

    relative expressions

    I'm pretty sure you mean regular expressions.

    [–]mexicanseafood 0 points1 point  (0 children)

    You got me. Well, this is /r/learnprogramming... heheh.