Slashdot Mirror


Starting an Education in IT?

AriaStar asks: "It's overwhelming to start trying to learn all the different technologies needed to go into programming. It seems that every type of technology assumes knowledge of a different one, which in turn requires knowledge of another, until it's gone full circle. I am interested in everything from Unix to AJAX to Perl. Things like HTML, Javascript, and SQL are like English, but then again, they're basic. Where is the best place to start? What is a good path for someone who learns quickly and easily, but who is simply too overwhelmed, to take?"

35 of 425 comments (clear)

  1. look under the hood by icepick72 · · Score: 4, Interesting

    There's a lot to look into, but whatever you learn, take the time to figure out what's actually happening under the hood, especially if you use RAD tools. There are two groups of people: those that know how it works underneath, and those that don't. Those that do can output much more wonderful things. Certifications are a good way to make yourself get under the hood and truly understand.

  2. DIY by nt5matt · · Score: 3, Informative

    Grab a used PC, install Linux on it and play around with MySQL and PHP. It's a cheap and easy way to learn the basics and you can adapt to whatever technologies are in use when you get hired in a development shop.

    1. Re:DIY by bobdapunk · · Score: 5, Insightful

      I am so tired of people saying that installing linux is a good way of learning a *insert language/technogloy*. Read a book. Work on a project. Linux is not the greatest tutorial invented to teach - it is an open source source operating system that offers flexible solutions to many problems for people that want to learn the applications and environment.

      The best way to learn a certain language or technology is to work in an environment that you understand and build on your current knwoledge. Jumping into a different environment and leanring it can get you frustrated and distracted from the true goal and I am sure has lead more than one perosn to be discouraged enough to stop pursuit of what they set out to accomplish.

      I am drunk, sorry if I am rude. But being a linux fanboy is not the answer to every f'ing question posted to /.

  3. You can't learn everything by jdhutchins · · Score: 4, Insightful

    There's a lot out there. You might be able to get a sample of a bit of everything, but ultimately, you should probably pick a field and stick to it. If you have wide-ranging interests, pick a place to start, and let your journey wander from there. Pick a project, learn what you need to do it, and then move on to the next. But there's simply too much out there to "learn it all"

  4. Programtic structure by dave562 · · Score: 5, Insightful

    Take a course in basic programming structure first. You need the foundation of how to properly setup the code. By that I mean declaring variables, setting up functions, properly commenting (gasp) your code so that others can follow what you've done.

    Once you understand the proper structure it is much easier to branch out to the nuiances of the various languages.

  5. Generalist, or specialist? by bariswheel · · Score: 4, Insightful

    Studying IT is waay too general.

    Here's a question you might first want to answer: do you want to be a specialist or a generalist? to be a generalist, you probably want to be a specialist at one field, security, database, web design, web programming..etc. The fact of the matter is that there is so much out there, that you have to be a bit disciplines to really get anywhere. Or you can find an IT job doing support or so, then on the side start learning the underpinnings of a certain vertical market. Perl + Unix + C would be very good fundamentals to look at. IT is not a field like medicine, it's hard to draw a path, since there's so much to know and so many options. I would consult with someone who is an IT pro and possibly follow his/her footsteps. But yes it's a challening feat to 'master'.

    --
    Insinct is stronger than Upbringing - Irish Proverb
  6. Re:Where to start by Marcion · · Score: 4, Insightful

    Well my point was not to get overwhelmed. Just start where you can. You end up going around the hermeneutical circle several times anyway.

    I agree that in IT there is nothing to fear but fear itself. So be technologically independent, get your hands dirty, get the hard stuff out of the way first then enjoy the ride back down, set yourself up an Apache server or install Gentoo. Compile "Hello World" with GCC. Try to use Emacs or Vi.

    While graphical IDEs are all well and good, if you can put up with the command line, text-only way of doing things then you are a bit more future proof, know a bit more how it works and are ready when the brown stuff hits the fan.

  7. DO by iguana · · Score: 5, Insightful

    Don't just read about stuff. Do stuff.

    Find a pet project, find someone with a pet project, volunteer to help a friend or community organization set up a website. It has to be something you're interested in doing or you'll avoid it and not enjoy it. Pick a target and shoot for it, O'Reilly and Google at your side.

    The only way to really learn anything is to do it. I read a bazillion books about DNS/Bind but none of it sank in until I had to set it up myself. Same with SQL, Perl, Python, Template Toolkit, C++, etc.

    It's annoying, it's painful, it's frustrating, but the only way to really learn anything is to get in there and get your hands dirty.

  8. learn by solving *your* problems by Speare · · Score: 5, Informative
    Sure, there are seriously important things to learn in data structures, algorithms, and methodologies, but the fastest way to learn programming (the fastest way to learn ANYTHING) is to try to solve your own problems, not the stock rote example problems you'll find in books.

    If you want to learn how to skate, take a tennis ball and chase it around a parking lot while having skates strapped to your feet. Don't spend more than a few minutes trying to consciously learn how to stand, roll forward, brake, or fall. Chase the ball. Do something OTHER than learn how to skate, but do something that requires skating. Your medulla oblongata will do the job far faster if it's allowed to do it without micromanagement from your conscious mind.

    Same goes for programming. You won't learn how recursion works by typing in a fibonacci example. You'll learn how recursion works when you want to make a gallery thingy and find yourself needing to catalogue all *.jpg files below a certain directory. You won't learn how object oriented programming works by re-reading the wikipedia article on polymorphism, you'll learn more valuable lessons when you decide it's insane to be writing almost identical code in so many places and realize that's what a parent class is for.

    Solve YOUR problems, not the book's, and you will develop a passion for problem solving. Almost all of the "programmers" out there who succeed have one thing in common: they wanted something implemented so they got it working on their own.

    --
    [ .sig file not found ]
  9. Knowing what to learn by mysidia · · Score: 3, Insightful

    Knowing what to focus on can be taken as a research problem. Before actually trying to learn how to go about using the individual technologies, you need to research what each one is, why it is important, and how it will fit in with other technologies you would like to learn.

    In some cases, the answer may be to learn a little about each technology progressively. Learn a little HTML, then some Javascript, then more HTML, then more javascript, more HTML, the DOM, XML, ...

    When technologies are interrelated you sometimes need to learn a little about all of them before you can really start to master any of them.

    1. Make a checklist of what you are interested in and want to learn. You can't learn everything, and without a checklist, you won't really have a plan.
    2. Try to learn as much as you can about what exactly it is, how it works, what its benefits and drawbacks are, and what the alternatives are.
    3. Make a sublist of associated technologies; do the same for those associated technologies, except ones already on your list.
    4. Make a map of all the items in your list and their interrelations.
    5. Prioritize each technology according to which you are most interested in
    6. Start searching for references for each thing you want to learn about, and write them down -- you need websites or books, both for tutorial purposes, and to help you along.
    7. Start working on a project that uses the technology you are learning. Succeed with the project, and start a more sophisticated one that makes more use of associated technologies. Keep going.. learn by doing as well as by reading..

    Or just start trying to learn the most about what you're most interested, and when you discover another technology is involved -- start learning a little about that other technology too.

  10. PHP by darkain · · Score: 4, Interesting

    Personally, nowadays I'm giving people PHP as their first language. Well, first PROGRAMMING language. HTML is fairly easy and simple to understand, so giving them basic assignments of doing text output (like number generators for example) in PHP is a nice begining.

    Part of the reason I prefer to give people PHP, is because quite a few web servers support it now. Another reason, is because you don't need a compiler. The next would be the simplicity of string manipulation. And from there, you can get people into basic file handling and other things of that nature which will carry over nicely to other languages.

  11. Best way to start... by citking · · Score: 3, Interesting
    ...is to work closely with people who already know the stuff. Let me explain:

    I went to college for psychology and criminal justice. Since I was paying my own way, I went around looking for jobs. I tinkered in PCs before and was willing to learn anything, so I applied for and got accepted to a job with our ResNet (Residence Hall Network) department. All I knew at that point was installing Windows, some network stuff, and other odds and ends with computers.

    We had a small team, probably 14 students in total and had a non-techie but very nice and open supervisor. We were given specific areas to work in given our strengths but there was absolutely no problem with teaming up to learn something new.

    When one of the students left, leaving a half-finished VB project, I decided to try and tackle it. Working closely with my friend Sean, we worked out what was done and what needed to be done. Any resources I needed were supplied by other staff members or my gracious supervisor. In the end, I learned a whole new programming language (albeit, not the one that many Slashdot geeks are friends with). I worked with our web dev guy to try and learn PHP and Perl (I failed miserably) and worked with another guy to learn about imaging. I talked with the university's network admin about how routing worked, Novell stuff, whatever.

    In the end I picked up so much that I decided to pursue a career in IT. Now I am a helpdesk manager, I love my job, and I try and emulate my old supervisor as much as possible. I learn a lot from my students (my latest challenge is ASP) and I try and teach them what I know in return.

    Just like the OSS community I feel bound to take what I've been given and pass it on to others. I'm not certain what your particular situation is, but I think surrounding yourself with people who know the technology, languages, or protocols goes a long way to staking out your own learning experince.

    Don't be afraid to hit the local library either. They usually have the latest books (for some reason the latest PHP/MySQL book is always available!) Ask a lot of questions, and don't be afraid to set up a sandbox and just play. Last bit of advice: Don't get frustrated. I can recall many times when I was against a wall with some weird configuration problem or what have you only to find the solution after using Google or taking a walk.

    Good luck!

    --
    "This food is problematic."
  12. Don't start with the tools, start with the concept by cookiej · · Score: 4, Insightful

    To keep from being overwhelmed, start with an idea you have for something that you have a passion for. Think of some idea and lay it out on paper (or visio). I wanted to mess around with Python and we recently had a baby, so I wrote an "I/O" and sleep tracking system for our infant daughter in Python.

    For the most part, all the high-level languages are the same. There are differences and strengths, but at the point you're at most of these would be lost on you anyway. You already know Javascript, so pick another language -- and try to build your project in it. PERL, Python, .NET, Ruby... Pick one and stick with it.

    About 5 years ago I wrote a project for my brother so I could sink my teeth into PHP/MySQL. It's turned into a product we now sell and make (a small amount of) money on each year. The hardest part for me is sticking to the project with no real client to be beholden to -- hence MY need to build something I really want to make, not some example out of a textbook.

    When I decide it's time to learn something new, I generally see what is "up and coming" and learn that so by the time I'm fluent, I'm much more marketable. Right now, Ruby looks like a pretty decent choice.

    Good luck!

  13. So many responses, so much BS by Mycroft_514 · · Score: 3, Informative

    Look. Start by learning a procedural language, and then learn the 5 structure diagrams. Then proceed from there to non-procedural languages.

    Finally, learn Assembler. Yes, Assembler. It will teach you how things work. NOW you can learn ANY programming.

    Next a course in Data Structures is good. Follow up with a course in database management. Especially if you can get a good one that teaches Network DBMS structure, not just Relational.

    Operating systems are LAST, and only if you want to be systems programmer.

  14. A Good Foundation... by Kr3m3Puff · · Score: 4, Informative
    I would say you are right to assume that things are changing too much and too fast to pick out a plan that includes the latest stuff.

    My suggestion is that (and in this order):
    1. Learn a good procedural programming language (e.g. C or Pascal)
    2. Learn a good Object Oriented Language (e.g. C++, C# or Java)
    3. Learn a good Scripting Language (e.g. Perl, PHP, etc)
    4. Learn Regular Expressions
    5. Learn some variety of XML to get the fundementals down
    6. Learn XHTML


    Now you should have a solid good base to learn just about anything. I would stay away from IDE's as much as possible and try to learn by hand, it is sort of doing division long hand before using the calculator.

    Be aware that most technolgies like LAMP, AJAX, DHTML, etc are just applications and combinations of technologies that will be super easy to undertsand if you have a good grounding in the basics.
    --
    D.O.U.O.S.V.A.V.V.M.
  15. Discrete Math: Foundation of Computer Science by reporter · · Score: 4, Insightful
    The best approach to learning information technology is to first learn the foundation of the technology. In other words, study the following.

    1. Discrete Mathematics (recommended textbook: Discrete Mathematics by Kenneth A. Ross and Charles R. Wright)
    2. Finite Automata and Computability (recommended textbook: Introduction to Automata Theory, Languages, and Computation by John E. Hopcroft, Rajeev Motwani and Jeffrey D. Ullman)

    Technologists who understand the fundamental theory can generally write more elegant, more efficient computer programs than pseudo-technologists who are ignorant of the science in computer science.

    Once you have trained your mind on the fundamental theory, you will discover that most information technologies are quite simplistic.

    Finally, one often overlooked subject is English. Learn to write and speak well in English. It is the fundamental mode of communication in the world of advanced science and technology. You may have great ideas, but if you cannot them to your English-speaking peers, then you are no better than a pseudo-technologist.

  16. Errata by Anonymous Coward · · Score: 5, Funny

    The last sentence, " You may have great ideas, but if you cannot them to your English-speaking peers, then you are no better than a pseudo-technologist. ", should read, "You may have great ideas, but if you cannot explain them to your English-speaking peers, then you are no better than a pseudo-technologist."

  17. Mainframes by DaKrzyGuy · · Score: 4, Insightful

    I know it might sound a little strange but if you can develop mainframe skills in 5 years you will be worth your weight in gold. So many of the current people that are mainframe system programmers will be retired by then and there are not many people learning the skills to fill their places. The one problem is it is hard to learn the skills because you can't just play around with the latest versions of mainframe software on your PC like you can with most windows and unix tools and applications. IBM has a lot of information and free learning modules on their site and several schools are starting programs to teach these skills to fill the knowledge gap. Plus you can learn how to run linux on a mainframe too so that you don't feel totally in the dark ages :)

  18. Re:Where to start by Nicolay77 · · Score: 4, Informative

    And also get a good book about LISP and learn it. Almost every language out there is placed somewhere between C and LISP.

    You can draw a line like C____C++_Java____Python___Ruby_Lisp

    I suggest Common Lisp an Interactive Approach.

    --
    We are Turing O-Machines. The Oracle is out there.
  19. Look at your local university's curriculum by oSand · · Score: 3, Insightful

    The general progression for a CS student(with some variation) is: Basic Programming -> Data Structures -> intermediate topics: declarative programming, software engineering, assembly -> more specialized stuff: compilers, concurrency, AI.

    I'd suggest that this is a good path.

    I'd also suggest you avoid php like the plague. It is a language that does not encourage good programming practice among novices. Also, it is terribly designed: you should see the best that IT has to offer, rather than the worst.

  20. Re:Start not; do or do not. Powertools kick butt t by PKPerson · · Score: 3, Informative

    This is very much my situation. I just finished a Computer Science AP class at my Hich School, and know Java quite well, as well as c++, which I suppose isnt too bad for a high schooler. My suggestion: find someone you know, a teacher or an older friend, who knows something, then learn everything you can from him. I had a great Computer Science teacher in High School. Though it was just a Java class, I also got my feet wet with c++, css, html, bash, and loads of other stuff. The trick to learning something is to use it. You WILL NOT learn c++ without writing a large-ish program in c++, config your enviornment, read books, and get everything running. The same applies to every other language.
    Youo want to generalize yourself, so my strategy is to learn one language that you like pretty well (java would be a good choice), and at the same time, poke around in python and c++. That way, you can learn advanced programming ideas and dont have to worrb about the language, and learn fun programs. Have some fun and experiment: Write a network program - you learn a lot about networks. Get your program working on linux - learn about portability and the linux shell. Write a good game engine - learn how to use enginges. The key is to just jump in.

    This is all applying to learning oo languages, but it applies to everything.

  21. It isn't about "everything" by fm6 · · Score: 4, Insightful
    Perfectly true. But he wasn't asking "how do I learn everything?" He was asking, "Where do I start?" He's wants things laid out for him in orderly progression, like they do with math: arithmetic in elementary school, geometry in middle school, algebra in high school, calculus in college. (No cute comments from you overprivilged types who had calculus in 8th grade.) The aim is not to teach you all of math which is impossible but to give you a grounding in some basic math skills.

    And there are computer curicula that do the same thing. And one possible strategy is to work your way through such a curiculum. But most computer geeks would rather work on their own, and they'd rather study technology they see being used, not what some textbook says are "basics". That's actually the way I learned.

    And if you take that approach, you will constantly run into references to technology you know nothing about. So deal with it. It isn't a mortal sin to skim over the parts you don't understand well. So you're reading that PHP manual and it starts talking about SQL. That doesn't mean you have to drop PHP and start studying SQL. It probably means that SQL is something that you'll have to learn eventually. But for now, the thing to do is just skim the SQL parts and get a vague sense of what it is and how it relates to PHP. Maybe take a little time to Google or Wikipedia SQL — but don't lose your focus on PHP.

    Of course, sometimes you will discover a new topc that's a prerequesite for stuff you don't understand. (Every programmer know aboutbinary encodings and two's complements.) But mostly not. I've been working with computers longer than most Slashdotters have been alive — and I still encounter places where the subject I'm trying to study seems to intersect subject I know little or nothing about.

  22. Re:Discrete Math: Foundation of Computer Science by Anonymous Coward · · Score: 3, Informative

    Discrete Mathematics (recommended textbook: Discrete Mathematics [amazon.com] by Kenneth A. Ross and Charles R. Wright)

    You ought to write a review at Amazon.com since the others there gave it an average of two stars.

  23. Why IT? by pipingguy · · Score: 4, Interesting


    Consider "real" engineering (mechanical, civil, even electrical). Many old-timers in these professions are retiring/have retired. Based on input from my discussion group, there are not enough people getting into this field to replace the out-goers.

    With the current generation's "pre-installed" computer knowledge, we need more people to get into the traditional engineering disciplines. It's hard and you might not be in an office every day, but this is going to be a booming area soon.

    If you have highly-developed computer/programming skills already, all the better.

  24. Mathematical Association of America by reporter · · Score: 4, Informative
    Among textbooks teaching general (i.e., not highly specialized) discrete mathematics, the Mathematical Association of America assigns a two-star (**) recommendation to Discrete Mathematics by Kenneth A. Ross and Charles R. B. Wright. Two stars means "highly recommended". Only one other textbook on general discrete mathematics received two stars. No textbook on general discrete mathematics received the highest rating: 3 stars.

    The book by Ross and Wright is quite good.

    The mediocre reviews at Amazon are likely at anomaly.

  25. Classes help structure learning by ThousandStars · · Score: 4, Insightful
    There is no substitute for motivation and personal interest, but classes can provide direction and orientation. All the buzzwords tossed around like footballs by and large boil down to different ways of applying a relatively small number of basic ideas. They're called computer "languages" for a reason -- once you understand the structure of a spoken/written language and know how nouns, adjectives, verbs and other parts of speech relate, you can construct sentences.

    What you're trying to do is somewhat akin to trying to understand paragraphs before you know how to construct a sentence or before you have an adequate vocabulary. An intro to CS class will provide the grammar and basic concepts that you can then apply to all these high level things.

    I'm sure some anti-school posters will tell you just the opposite, but you should remember that schools are only as good as the teachers and your willingness to learn. CS classes developed to provide structure to what seemed, even in the 80s, like a vast quantity of unregulated knowledge. A year of classes at your local community college may provide more help than three years of wading through newsgroup postings and online tutorials you don't entirely understand.

  26. Re:Where to start by Nataku564 · · Score: 3, Funny

    The full diagram wasn't shown. If you were to pull a bit more out, there would be a circle enclosing all it, with a line pointing to Perl.

  27. Re:Where to start by menace3society · · Score: 4, Insightful

    Also, write at least one non-trivial assembly program. You may never use it ever again for anything real, but it will change forever the way you approach programming.

  28. Re:Where to start by Retric · · Score: 3, Insightful

    I think it's a good idea to start by focusing on one area and then branching out. Once you have a good understanding of one area you can safely move on to other areas of computing to help you understand how this works.

    If you want to become a good programmer I would suggest doing something like this:

    Start with C.

    A) Write a program to open a file and display it to your screen.
    B) Expand that to make a copy of the file backwards.
    C) Make a new program that gets 2 numbers from a file (A and B) and prints A + B.

    Move on to C++ I would read Ivan Horton's beginning C++
    A) Start with a program that opens a file, reads a list of numbers, and sorts them.
    B) Extend that so you can work with 10+GB files quickly. (This would be a good time to pick up a book on computer algorithms and learn how your operating system handles memory.)

    Learn enough ASM to replace 2 functions in the above project with ASM

    I would stick with java for a while.
    A) All the above projects
    B) A simple web server.
    C) Extend the web server so it returns the contents of a small Database.

    Learn enough LISP and Pearl to parse a java file and find all the variable names for each function.

    At this point you should pick complex project you want to work on and using the best language for that task get it to work.

    PS: Have fun.

  29. Re:Where to start by maxwell+demon · · Score: 4, Insightful

    It is IMHO a bad idea to learn C directly before C++. Good style C programs are usually bad style C++ programs, so you'll have to "unlearn" a lot of habits from C. OTOH, when learning C++ first, then it will be easier to go to C, because the compiler will usually complain if you use C++-typical idioms.

    If you insist on learning C first, it's probably a good idea to learn Java before C++, because that way I think it's easier to get into OO habits.

    It may even be a good idea to have some LISP experience before going to C++, because some advanced template techniques are basically functional style (I guess that's why many people shy away from those).

    BTW, I guess you meant Perl, not Pearl.

    --
    The Tao of math: The numbers you can count are not the real numbers.
  30. Re:Where to start by 3770 · · Score: 4, Insightful

    Here's my tip. Ignore anyone that suggests that you learn assembly.

    It's like telling an architect that he needs to learn how to make bricks to be a good architect.

    You can learn only so much in a given period of time. Don't waste it on something you can't use. I understand assembly, and it is at times a comforting feeling, but in all honesty I belive the time I spent learning assembly would have been better spent learning design patterns.

    --
    The Internet is full. Go Away!!!
  31. Re:Where to start by grammar+fascist · · Score: 3, Insightful

    It may even be a good idea to have some LISP experience before going to C++, because some advanced template techniques are basically functional style (I guess that's why many people shy away from those).

    Naw, it's because C++'s template syntax is crufty and stupid, and the error messages are totally opaque.

    I'd say Java (or C# - same thing, really, except C#'s libraries suck more), C++, Lisp, C++.

    --
    I got my Linux laptop at System76.
  32. Re:Where to start by Mycroft_514 · · Score: 3, Insightful

    >It's like telling an architect that he needs to learn how to make bricks to be a good architect.

    No, it's suggesting that you have to know how strong bricks are to build a building that won't collapse. And the Dean of the school of architecture where I went to school was there because a building he designed collapsed.

    Anyone that suggests that you DON't need assembler is fooling themselves.

  33. Re:Where to start by donaldm · · Score: 4, Insightful

    Actually you are dead right on this. I find it is better to be a generalist (you normally earn more for a start) than a specialist because you have the ability to actually think outside the square. In my job if there is a need to learn a specific language I just learn it (may take a week or two) since as far as I am concerned most Programming languages are similar.

    Basically from a programming perspective I would not be as good as a specialist, however I don't normally program for a living and actually design at a much higher level so I normally tell programmers what is required.

    Not sure about the Mac. I find Linux with some good stats packages work for me and If you want a serious document preparation package use LaTeX (it's free and surprisingly easy to use).

    --
    There ain't no such thing as proprietary standards only proprietary formats. Standards are by definition open.