Next step?



  • Hey guys (and gals). I've been programming for a few years now, mostly in BASIC-type languages (Liberty BASIC and AutoIt 3, with some FreeBASIC). Among other languages, I've also dabbled in C (which I abused very badly), SQL, PHP, and JavaScript. I know markup languages aren't real languages, but I do know XHTML, XML, and CSS. I understand most of the principles of OOP, modularity, version control, flow-charting, and all that stuff.

    Here's my question: where do I go from here? I've all but decided to pursue programming as a career (I'm in my sophomore year of high school) - can't really imagine doing anything else. I know I wouldn't get too far with my current skillset, but I'm not really sure where to go from here. At this point, I'm basically considering either focusing on Microsoft technologies (client-side and server-side, C#, SQL Server, ASP.NET, and IIS), focusing on Web 2.0 stuff (AJAX+all that entails, Apache, MySQL, and some combination of PHP, Perl, and Rails), or learning some quirky language like Smalltalk or Python and try my hand at freelancing (and doing shareware). Which, if any of these, are good ideas? Have I missed any key area I should study?

    Thanks in advance for any advice and ideas!



  • I've been programming for a few years now, mostly in BASIC-type languages (Liberty BASIC and AutoIt 3, with some FreeBASIC

    Get amnesia so you can say to yourself you never started that way, then start learning some OOP language that's derived from C++. Consider getting a certification, pheraps. And show more respect towards XML.



  • A lot depends on where you want to go.

    Would you find it interesting to write libraries or write the code for device drivers, microchips and other embedded devices?  That would be a really large departure from your current areas of study.  You'd need C (not C++), more C, and keep going with the C until you write things like

    #define ELEMENT_OFFSET  ((int)&(((struct datanode*)0)->element))

    for fun.  Pick up a little assembler and it's always helpful to know a bit of Perl or shell scripting.  Algorithm knowledge is a must, don't just use the standard libraries, know how to write them from scratch.

     

    Or you could go for the intermediate-level writing code to handle code.  This is what you see Perl used for a lot: pulling together a lot of other programs written in a variety of languages and make them all play nice.  Python isn't a bad choice either (though I find Perl to be much more elegant).  It wouldn't hurt to learn several of the more unusual languages like LISP (or its variants/derivatives like Scheme, J, Erlang...).  Heck, even pick up some FALSE to stretch your mind.  Regular expression knowledge is important as well as a lot of general computing knowledge (know your protocols, your algorithms, how to manage a database, C, etc.).

     

    Or go all the way to the user/application level (where most of the stuff you've looked at so far).  I don't spend much time here so all I can say is, get to know all the languages reasonably well and get to know the libraries well.  Really know the libraries.  Know that for every problem all the pieces of the solution are already built, tested and reliable.  Take care to really know your stuff since the dime-a-dozen programmers flock here.

     

    The best advice I have is learn a lot of languages.  Stick with each language well beyond the "Hello World" and calculator phases.  (Personally I like to implement a simple game like solitaire SET or a puzzle solver).  The final goal should be: "I know what type of language is optimum for the problem, but I can solve it with anything."  Know where you want to end up, where I work we've been trying to get another programmer.  The job we're advertising is C programming and we're turning down library-dependent Java programmers left and right.

    And learn Perl, because you just can't beat this:

     

    sub what_sub_is_this {
    *{ $::{$_} }{CODE} == $_[0] and return $_ foreach (%::);
    }

    print what_sub_is_this( \&some_function );


  • @omega0 said:

    sub what_sub_is_this {
        *{ $::{$} }{CODE} == $[0] and return $_ foreach (%::);
    }

    print what_sub_is_this( &some_function );

    <sincerity>
        I hope I never have to maintain your code...
    </sincerity>



  • Get a degree from a major university, and enjoy your studies. That said, watch out for schools that teach "programming" or claim to teach computer science, but don't. 

     Why get a degree?  Because they force you to learn things that you wouldn't learn on the job or bother to teach yourself.  A good school is going to teach you theory of computation rather than how to approach a specific problem.   Most people I know won't study graph theory, abstract algebra, linear algebra,  or statistics on their own; they won't study algorithms or try to prove P =?= NP.  I have used more "theoretical" knowledge on the job than I would have believed.  I work with "amateur" or "self taught professionals," and their code can be good, but it has major flaws caused by lack of working knowledge.   The details of complier design can help design a flight simulator, and the details of image recognition can help find a cure for cancer; so be sure to learn both what interests you, but pay attention to other details.

     
     -- end rant --



  • @iAmNotACantalope said:

     Why get a degree?  Because they force you to learn things that you wouldn't learn on the job or bother to teach yourself.  A good school is going to teach you theory of computation rather than how to approach a specific problem.   Most people I know won't study graph theory, abstract algebra, linear algebra,  or statistics on their own; they won't study algorithms or try to prove P =?= NP.

    But some people would... 



  • don't get caught up on buzzwords like web 2.0, my advice is to stay away from any bandwagons... those ruby developers have free time to make videos and and write on their blogity blog blogs because they don't have jobs ;) ...also college and the degree itself are essential.

    don't read anything about xml, not worth your time (it's a standard, not a skill). and focus on real expereince as opposed to adding languages to the list. Create a couple small hobbyist programming project at first, anything that you find would be interesting program to write, then later move onto other projects, possibly internship, open source, whever u choose to go... I wrote a spider when I started out, was pretty cool... would go to an initial website, like cnn.com, then fetch all the URLs and begin going to the next, like cnn.com/SPORTS/, etc.



  • @Vechni said:

    don't read anything about xml, not worth your time (it's a standard, not a skill).

    I think this disproves your statement. There's more to proper XML use than tags and attributes.



  • [quote user="Renan "C#" Sousa"]

    I've been programming for a few years now, mostly in BASIC-type languages (Liberty BASIC and AutoIt 3, with some FreeBASIC

    Get amnesia so you can say to yourself you never started that way, then start learning some OOP language that's derived from C++. Consider getting a certification, pheraps. And show more respect towards XML.

    [/quote]

    Amnesia, ha ha. I'm okay with admitting I started with BASIC.

    Thanks, everyone, for the advice. I'm starting out with C++ today. My next languages after that (in no particular order) will probably be Perl, C, Assembly, and Regular Expressions. I also need to improve my knowledge of SQL dramatically. I know enough to squeeze by, but that's not good enough. Thanks again, guys.



  • regular expressions aren't really a language.  They are a tool that is used to match languages, however, they are limited to matching languages with a Finite-State / Regular grammar.  You really shouldn't bother learning Perl without learning how to use regular expressions.  And don't fall in to the trap of just learning the basics of lots of languages.  You need to use a language enough that you know it's strengths and weaknesses.  That being said, you need to know a number of languages to know the strengths and weaknesses.

    I would suggest learning C before C++.  That way you actually bother to understand pointers, the difference between stack and heap, and a number of other things that a lot of C++ programmers don't seem to understand. 

     Assembly:  Don't bother for now.  You can learn it later, after you know other languages.

    Learn 1 from each of the following groups:

    group 1 (imperative, static typed): Java, C, C++
    group 2 (OO): C++, Java, Ruby, Python, C#.  (There are a couple others that people here talk about, but I haven't used them so I'm not mentioning them here)
    group 3 (functional):  LISP, Scheme, ML
    group 4 (dynamic typing):  Perl, Ruby
    group 5 (logical languages): Maude, Alloy

     

    You don't have to do them in that order, but I suggest it.  I really would't suggest dynamically typed languages until you've had lots of experience with the other languages.

     



  • @VGR said:

    @Vechni said:

    don't read anything about xml, not worth your time (it's a standard, not a skill).

    I think this disproves your statement. There's more to proper XML use than tags and attributes.


     

    that's amazing, you found a side bar post related to XML and show it to me. And gave me a lecture too, oh boy :(

    So, your post had nothing to do with what I mentioned (non-relevant), should't you have at least an above average concept of... oh I dunno, Relations to be posting here?



  • @Vechni said:

    @VGR said:
    @Vechni said:

    don't read anything about xml, not worth your time (it's a standard, not a skill).

    I think this disproves your statement. There's more to proper XML use than tags and attributes.


     

    that's amazing, you found a side bar post related to XML and show it to me. And gave me a lecture too, oh boy :(

    So, your post had nothing to do with what I mentioned (non-relevant), should't you have at least an above average concept of... oh I dunno, Relations to be posting here?

    Ignoring your unnecessarily hostile tone, I don't see why you're making such a difference between programming languages and markup languages here. The tasks of the two are different, but that's already where the differences end. Both are formal languages, both are standards, built with more or less sanity and common sense and both have strengths and weaknesses that one should know about. Those strengths and weaknesses are results of the decisions humans made when they developed them and are not "god given" like the features of computational theorems. But nevertheless you need to know them - well - to do work that will not backfire in the long run.

    There is no need to hype XML and it's not a new "technology" either. But nevertheless it is used in many places in the industry. So you should at least know the most important items of the surrounding toolset.
     



  • tampabill92. for it's worth  Javascript is a fine language to get the fundamentals of OO, as well as tons of good info out there. The results are immediate, and a lot of fun as well. If I were ever to teach programming I'd start with Javascript.

     

     


Log in to reply