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?"

425 comments

  1. Where to start by Marcion · · Score: 1, Funny

    man ls

    After that just follow your nose and interests.

    1. Re:Where to start by Poltras · · Score: 1
      man man is still better to start learning :)

      Seriously though, what you want to do? There is sooooo much out there that we cannot just point at something and say "that's the thing to learn". But if you want one trick here: don't be a specialist, be a generalist. Learn different things, and think about different way to do them. Think different! (and buy a mac)

    2. 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.

    3. Re:Where to start by xTantrum · · Score: 1

      Get a good book on C and learn it. I suggest the books by stephen prata C primer plus. its in its fifth edition. IMHO, C is the mother of All invention. well at least on the software side. Serioulsy its a really good book.

      --
      $action = empty(PHP) ? backToC() : unset(PHP) ; "when the concrete cases are understood, the abstractions are readily
    4. 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.
    5. Re:Where to start by Marxist+Hacker+42 · · Score: 1, Interesting

      I still say assembly- there's a darn good bit of understanding you get when you're programming every memory location manually.

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    6. Re:Where to start by glassjaw+rocks · · Score: 1

      Doesn't Perl fit in there somewhere?

      --
      -gjr
    7. Re:Where to start by Nicolay77 · · Score: 1

      Well, I think so, but I don't know myself enough perl (and don't plan to learn it) so I wouldn't know where to put it.

      I would guess it's between Java and Python.

      --
      We are Turing O-Machines. The Oracle is out there.
    8. 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.

    9. Re:Where to start by Dan+Farina · · Score: 1

      Given Perl's "more than one way to do it" ("can't do it the same way twice!") mentality, it probably exists as a range on the continuum spanning Java to Ruby. :tongue in cheek:

      df

    10. Re:Where to start by gFool · · Score: 1

      Installing Gentoo is a fantastic idea. You should also look at the documentation with Gentoo and Debian. They are gold. If you know some C++ get a copy of Lippman's 'C++ Primer' and the Josuttis book on the Standard Library. The first is definitely not a primer. Also, try picking up some books on programming posix if you want to do Linux... Learn some vi and install Eclipse for programming. Some knowlege of subversion is good as well. Now the hard part... This is a test of personality... Are you a Python person or a Perl person? Look over both a little, you should be able to tell which type of person you are right away. (for me it's python) Hope this Helps gFool

    11. 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.

    12. 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.

    13. Re:Where to start by dr.+greenthumb · · Score: 1

      It sounds like the OP wants to aquire some sort of web-oriented know-how so I would definitely second your suggestion to compile/install apache, mysql, postgres, php, perl and play with PEAR and CPAN modules. In addition, basic knowledge of UNIX and how shells work is certainly fundamental in this realm of IT.

      However, I don't see any reason why you should spend any time trying tp wrap your head around the excentricies of vi(m) and emacs. Chances are that you would be better off with some sort of IDE or editor whose interface resembles the programs you're already familiar with.

      You might perhaps need some sort of proficiency in those programs to earn your Geek-Badge, but I think you'd be better of saving that mental energy to something more worthwhile.

    14. Re:Where to start by ggvaidya · · Score: 1

      Well said!

    15. 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.
    16. Re:Where to start by Anonymous Coward · · Score: 1, Insightful

      Stay away from I.T. Let the Indians in Bombay and Calcutta do this. The tech changes too fast, your company will not train you and you'll be obsolete and irrelevant in the market before you're 30 y.o. Instead, go into I.T. sales, make a ton of money and avoid the geek trap. No matter how smart you are, I.T. is for the young. How many 48 y.o. s/w engineers do you see ??

      Former I.T. geek, turned I.I salesman.

    17. 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!!!
    18. 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.
    19. 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.

    20. Re:Where to start by Anonymous Coward · · Score: 0

      While that's true, the analogy is wrong. If you are coding in C or C++, then learning ASM can actually be a very helpful tool in getting beyond the basics.

      However, if you are learning GC languages like Java or C#, then ASM is going to end up being a confusing language with no real link to the languages in question (although, both are probably written deep-down in C, at least in the GC/compiler phases).

    21. Re:Where to start by holy+zarquon's+singi · · Score: 1

      no idea why this is modded funny.

      --
      "...we should just trust our president in every decision that he makes and we should just support that." B.Spears 2003
    22. Re:Where to start by cytg.net · · Score: 1

      "Here's my tip. Ignore anyone that suggests that you learn assembly."
      - You should ignore me then

      I was about to suggest that.
      However i think your reason for NOT wanting him to look at asm is flawed.
      He's blank.
      He doesnt know what the fuck he want to do, so he needs a little taste of everything.
      But rather .. the question is flawed.
      If you dont have the natural curiosity to make your self an picture, an idea, to get atleast a little clue about what you're interrested in, perhaps this field aint really for you, and perhaps you're just not that motivated.

    23. Re:Where to start by 3770 · · Score: 0

      Knowing how to make bricks = knowing how to code assembly

      Knowing the properties of bricks (such as strength and weight) = knowing an API

      In your analogy you are saying that you need to know how to make bricks to know the properties of a brick that matters to an architect. You are messing up your analogies to fit your opinion. It doesn't make sense.

      Analogies aside, explain to me how knowledge in assembly makes a Java-programmer more productive in a significant way?

      I agree that a Java-programmer that knows assembly likely is a better programmer than one that doesn't know assembly. But that is not the same as saying that learning assembly makes you a better Java-programmer.

      A person that spends time learning assembly for fun, is the same person that also stays up all night to figure out regular expressions, and how XSLT is working, or install MySQL so that they can mess around with database queries. People who learn assembly tend to be passionate about programming.

      If you are passionate about programming and want to learn assembly, then by all means, go ahead. It is practically a hobby activity. But it is _not_ the most energy efficient way to learn how to program in a modern environment.

      --
      The Internet is full. Go Away!!!
    24. Re:Where to start by holy+zarquon's+singi · · Score: 2, Insightful

      yeah, buy a mac. Good idea unix without any pain whatsoever. Just make sure terminal is in your dock and opened at startup. However, by going the unix route you will learn the basics of how to do scaleable IT. Get a good $EDITOR and learn how to use it. For the next 5 years or so you will meet political resistance from windows zealots. use cygwin and explain to management how a real unix environment would be much easier to cope with. Make yourself more valueable than the SharePoint jockeys in less time with fewer resources. Tolerate javascript, (barely) tolerate IE (and try to deprecate its use). Deploy everything over the web unless you make a can make business case for console only. Jifty and Catalyst. Give people with problems rescue cds. ...

      --
      "...we should just trust our president in every decision that he makes and we should just support that." B.Spears 2003
    25. Re:Where to start by Ulrich+Hobelmann · · Score: 2, Interesting

      Add Standard ML to the list. Everyone should know about functional programming with variant datatypes.

      It also has a good book on compilers, another topic any serious CS guy should know about (Andrew Appel's Modern Compiler Implementation in ML; avoid the Java one, it only shows how to get the ML stuff done in Java with three times the code).

      Alternatively some people prefer Haskell, which grows more and more popular, and arguably has a nicer syntax.

    26. Re:Where to start by Anonymous Coward · · Score: 0

      Smalltalk is probably better ancestor to ruby. Ruby does not have much to do with functional
      programming paradigm.

    27. Re:Where to start by KidHash · · Score: 1

      If you do, look for a book called "ML for the working programmer" by Larry Paulson - he's a lecturer at Cambridge University, and he lectured ML to us this year - the book is really good.

    28. 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.
    29. Re:Where to start by CastrTroy · · Score: 2, Insightful

      I think the only good programmers, and the only programmers I like to work with, are those who are passionate about programming. The people who see it as a job, or a way to get money, are not the kind of people that I enjoy working with. Most of the time they know less, because programming is work, so they don't do as much on their spare time, and didn't spend every spare second in high school (where there are the most spare seconds, and your brain is a sponge) learning about computers. Sports professionals are the same way. You don't get to the NBA by cheating through 4 years of college, and lying on a resume. You get to the NBA by practising every day of your life from the time you are 5, and knowing that this is what you really want to do with your life.

      --

      Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
    30. Re:Where to start by podz · · Score: 1

      "Man man" is good :-)

      "Be a generalist" is really bad advice, and I hope nobody honestly pays attention to it.

      If you are after job security and the benjamins, then you damned well need to be a specialist. A specialist being someone who is a solid expert with at least one core technology, and more than competent with at least two others.

      If you're a generalist, then you can expect lower salary as well as decreased job security.

      When choosing something to specialize in, do not pick java, which is overcrowded with so called experts. After all, the entire purpose of java was to allow corporations to begin treating programmers as commodities so they could be hired and fired according to the rise and fall of the economy, instead of paying them the Porsche buying salaries of good C programmers of yesteryear.

      You want a good tip for an area to specialize in? Scalability. Scalability is the most difficult problem facing all heavily used systems. Learn how to design scalable systems and you will have a good paying job for a long time.

    31. Re:Where to start by Poltras · · Score: 2, Insightful
      Depends. If you cannot be a real solid expert on something, then it doesn't pay up. Look at the COBOL people who couldn't do anything else than COBOL. How many assembly expert do we really need in this world?

      What I was saying is tat being an expert doesn't pay up because technology change really often. How long before any serious project will be changed to Java (or even .Net)? If you work for that company, and you're the C expert and don't know anything about java, what of your job? How long Ajax will be the new hype? What will we do if the experts don't want to learn any other thing because they are too old? How many experts and specialist already don't want to learn something different? And btw, I've met a lot of those guys that were working in dark closet because they did not want to "spoil their brain" and learn .net...

      Generalist is not about knowing _everything_. Generalists should not be whining about learning new things. They should be interested in everything, and particularly at solving problems using new and revolutionnary ways. They are the real kind of hackers. Hell, that's how civilization advances at all.

    32. Re:Where to start by minkie · · Score: 1

      I'm less than a year away from being a 48 y.o. s/w engineer, so this comment kind of annoys me. Most of the best developers in my shop are older people (40's and up). Our best guy (who now holds the title of "Chief Architect" is 10 years older than I am. None of us "old guys" are using the languages or tools that we were using when we first got into the field. Successful species evolve; old dinosaurs get turned into petroleum.

      When you're right out of school, knowing the hottest technology of the day will get you a high paying job. You can ride on that for a few years, but then you will discover that no matter how good you are, or how hot that new hot technology is (php, C#, Java, Ajax, whatever), by the time you're 30, you will indeed be "obsolete and irrelevant" unless you learn whatever is the hot new technology 10 years from now. If you sit on your butt and wait for your employer to train you, you will indeed be a dinosaur faster than you can say "fossil fuel".

      The answer is to keep learning new stuff yourself. Push yourself to learn one new language or technology every year. Some of them will become hot and you'll be in demand. Others will just add to your depth of knowledge and experience. If you want a career where you don't have to learn anything new once you get established, try bricklaying or ditchdigging.

      Also, don't just learn programming languages. Study computer science. Learn about algorithms. Learn about different development processes. Learn about QA. Learn about project management. All of these things will help you be a better programmer. They'll also help you be a better player in a big development project because you'll be better able to interact with other groups.

    33. Re:Where to start by BartonOC · · Score: 1

      Although only 24, i agree with the guy who is less than a year away from being a 48 y.o. s/w engineer. I strongly urge you to study the things that will give you a strong understanding of computing basics. The very nitty gritty of programming logic and structure. Computer science curriculims will give you this - IT curriculiums will give you training on whatever programs are currently out there - good for now, not so good when you're not getting classes on the next versions. If you're going to be in the computer field for a while - you need to understand that it is a field that rapidly changes and be constantly adapting to that. You need to accept the fact that wether self initiated or in classes - your constantly going to be learning new technology, languages and even the concepts themselves will bend a little through the years. No one can define a route for you but yourself depending on what you ultimately want to do and what you like most about computing. If you really want to be into the nitty gritty of computers in the long haul, looking into assembly is not a bad idea. Looking at how the code actually works gives you a better understanding of how the computers work and process what we're telling them to do. I've never become fluent in assembly - but I've poked around and read up on it to understand how it works and knowing this can help make you a more efficient coder. I would reccomend studying two core areas: programming logic, and databases. Most of the stuff out there is database driven, and it takes programming logic to get then info you want out. Then again if all you want is to be around the stuff, go into sales, and just believe the PR all the companies send out and you'll prolly sell a bunch of stuff.

    34. Re:Where to start by Anonymous Coward · · Score: 0

      Analogies aside, explain to me how knowledge in assembly makes a Java-programmer more productive in a significant way?

      Why is a switch statement faster than if-else if -else blocks?

      Why is recursion a good thing to avoid, when possible?

      What are bitwise operators, and why are they so fast?

      Knowing and using ASM has certainly improved my coding in everything else. Do you NEED it? No, of course not.

      I recommend coding in ASM on a RISC device to anyone who asks me about learning to code. Not so much for the above -- though it is useful -- but because it provides an environment that a person can COMPLETELY understand. Here are 32 commands: do with them what you will. Sure, it is usually turning on LEDs, or implementing bit-banging to read a temperature from a demo board,but so what.

      And there is the cool factor: screwing around with microcontrollers provides far more sense of doing something than learning the same basics in Java or .NET. When you make something physically move it provides more satisfaction. Or at least it does for me.

      It also provides a nice stepping stone: write some code in ASM, then connect to the functions using C calls. Compile your C code down to ASM and take a look at what is happening.

      People who write professional code who have never touched assembly kind of scare me. I mean, you CAN be a great programmer without it, and it DOES take a good amount of time which could be spent gulping down another API etc... but anyone in industry (except, it seems, the HR guys) knows that any programmer that knows a few technologies can soak up a new, related technology in a few weeks.

    35. Re:Where to start by tootlemonde · · Score: 2, Insightful

      There may be a better case for learning assembly as a first language than there is for learning any other language first if you are going to pursue a career in programming.

      There's no other single place where you encounter all the fundmentals of programming and machine architecture in order to write the simplest program.

      I've forgotten the syntax of assembly years ago and couldn't write anything in it today. Yet, I think it was the most valuable single course I ever took.

      In fact, if you take a course in assembly and wind up hating it, you might question whether you ought to be a professional programmer all. Consider network administration.

    36. Re:Where to start by jZnat · · Score: 1

      Better yet, don't learn assembly until you have a good grasp of fundamental computer science concepts (like the aforementioned design patterns) and can program efficiently in a couple languages (e.g. C and Java, or a procedural and object-oriented language). Learning some assembly is generally interesting as it teaches you the inner workings of processors and computers in general, and you can see how it relates to how languages like C were structured in order to get the best performance possible without writing in assembly.

      Then again, I'd only recommend learning a bit about assembly and compiler theory if you're interested in computer science and not just learning the tools necessary for programming.

      --
      'Yes, firefox is indeed greater than women. Can women block pops up for you? No. Can Firefox show you naked women? Yes.'
    37. Re:Where to start by 3770 · · Score: 1


      Good thought out reply. Thanks.

      I would argue though, that all applications that I've encountered in my career that have been slow have been slow due to using a stupid design.

      The fix to that is to figure out a better algorithm, or figuring out how to avoid a network round-trip, or something like that.

      Also, not that I do a lot of recursion, but why would you say that recursion is bad?

      --
      The Internet is full. Go Away!!!
    38. Re:Where to start by Anonymous Coward · · Score: 0

      How about go to school and get a degree in Computer Science. That was a good starting point for me.

    39. Re:Where to start by tepples · · Score: 1

      Why is recursion a good thing to avoid [in the Java language], when possible?

      Because the designers of the Java language's reflection and security model did not foresee making it feasible for the virtual machine to optimize tail calls in general, and most virtual machines don't even optimize self tail calls.

    40. Re:Where to start by gibarian · · Score: 1

      The question is- will it change your approach in good way or bad one. IMO languages like lisp, python, ruby support thinking on far more abstract level then assembly language...

    41. Re:Where to start by mysticgoat · · Score: 1

      GP: You can draw a line like C____C++_Java____Python___Ruby_Lisp

      P: Doesn't Perl fit in there somewhere?

      Yes, it does, and one of the above does not. The ordering needs adjusting, too. Unfortunately, the lameness filter has blocked my efforts to diagram the inheritance chart.

      The ASMs gave rise to C which begat C++ (the best of the ASMs, IMHO, was 6502 Assembly)

      Lisp arrived spontaneously out of a supergeek's forehead, following a superheadache brought on by a long night of coding, beer, Jolt, and pepperoni pizza. This is the only explanation for Lisp that can account for all the round, square, and curly braces, so it must be true.

      Fortran (FORmula TRANslation) and COBOL (COmmon Business Oriented Language) were born of committees (one academic, the other military/industrial). Despite having the usual clarity and insight that we should expect from a committee, both of these have made significant contributions to computer language development.

      BASIC (Beginners All Purpose Symbolic Instruction Code) came out of another supergeek's mind, as a result of indigestion due to a surfeit of pepperoni pizza, Fortran, and Cobol (which were all served up on Hollerith cards-- which is important since Basic was written to escape the limitations of the card punch machines). (Which was good: the bit buckets were beginning to overflow and were it not for Basic we might have drowned in our own chad.)

      AWK (Aho, Weinberger and Kerhighan) was an alternative to B which was the precursor of C. Without awk we might not have regular expressions. Don't try to program in awk. It is said that Forth is a write-only language: awk doesn't even approach that.

      Pascal began life on a blackboard in Switzerland but was abducted, taken to California, converted from chalk on slate to byte code, and put to work in the fields of secondary education.

      Perl (Practical Extraction and Report Language / Perfectly Ecletic Rubbish Lister) is the product of Larry Wall who might be a genius or perhaps a madman or perhaps just what we should expect from a natural language linguist. Perl draws on these languages:

      ASMs, C, C++
      Fortran
      Cobol (especially wrt to report structuring and formatting)
      Lisp (the best of list processing is incorporated into Perl)
      Basic
      Pascal
      awk (especially wrt regular expressions and text stream processing)

      It also incorporates concepts from natural languages like contextual dependence, "magical" expressions, and idiomatic constructs.

      Python, Ruby, PHP, and to a lesser extent Javascript have been influenced by Perl. Python and Ruby can be seen as attempts to tame Perl's wilder ways by decreasing the amount of TIMTOWTDI (There Is More Than One Way To Do It) and DWIMness (Do What I Mean (not what I say) ). In some environments, this removal of parts of Perl's power seem appropriate.

      Java may have contributed something to Perl, but I'm not sure what. Perl probably hasn't had much influence on Java, either. I think Sun has been trying to keep Java pure, and won't let it out on the streets where it might pick up bad words.

      Perl could be a good first language. A major argument in favor is that Perl allows the student to focus on and learn one concept by forgiving his mistakes with other aspects of programming that he hasn't mastered yet: this is the positive side of DWIMness and TIMTOWDTI. The major argument against Perl as a first language is that these features allow somebody who doesn't know what they are doing to write programs that sort of work (and end up creating huge amounts of work for others later on).

      There have been some really bad programs written in Perl, and Perl's reputation is bad because of that. There have been some really bad novels and poems written in english, and it is therefore correct to disdain all english novelists and poets since the english language is obviously such a piece of crap.

      If you choose to use Perl as your first l

    42. Re:Where to start by segfault_0 · · Score: 1

      The real problem is learning languages instead of learning how computers work and how languages give you the ability to controlling them. C is excellent for this task because it gives you a good mix of low and high level techniques and you will learn as much from its limitations as you will from it capabilities. Then once you understand C and why it works the way it does, you will be in a position to appreciate what C++/Java/C# and futhermore OOP does for you. I also think what you learn strongly depends on where you want to end up, if you want to write applications your a fool not to concentrate on OOP in later steps, while if you want to work with hardware or write drivers or low level OS components C/ASM are your best track. I like the suggestion for Perl, id also suggest learning to use grep awk and sed for the same reasons - because cut and paste just doesnt cut it in large code bases, but lisp - i think its a waste of time for most programmers.

      --

      I was crazy back when being crazy really meant something. (Charles Manson)
    43. Re:Where to start by masdog · · Score: 1

      Don't jump to very hasty conclusions about IT programs. I just got an IT degree, and I didn't get any training on the "programs that are out there."

      Instead of learning about SQL Server, I learned SQL and how to build a DB in 3rd Normal Form. I learned VB, but before I even got to that class, I had to take another one where we spent more time writing and testing programs on paper. Instead of learning how to configure a Cisco Router, I learned about the 7 layer OSI model and how data communications work.

      Some IT programs, especially at the Associate Degree level, probably do only teach you the current technology. A program that is well designed won't do this, though.

    44. Re:Where to start by dubbreak · · Score: 2, Informative

      Excellent point and I agree wholeheartedly. I think assembly should be taught earlier then students would not have such a huge problem understanding pointers in C. Also when one moves onto learning OS's understanding registers, stack allocation and interupts is very helpful and makes concepts much clearer. Plus if you can write clean organized code in assembly then doing the same in high level languages should be trivial.

      --
      "If you are going through hell, keep going." - Winston Churchill
    45. Re:Where to start by Anonymous Coward · · Score: 0

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

      Part II. Learn to spell Perl

    46. Re:Where to start by Anonymous Coward · · Score: 0

      "...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..."

      Don't know about that....7 or 8 years ago I was tested for jobs with terminal windows only to write java/perl/CGI apps....since that point, potential employers have tested much more on knowledge of IDE's....in particular I was tested HEAVILY for my actual specific skill inside Eclipse and my most current job offer came from someone that I had to perform an over the shoulder test of my expertise of VS.NET....

      In todays employee market if I had to developers with 4 years experience in Java one all command line and no Eclipse/Netbeans..and one with all IDE development, I would choose the one with more IDE experience, assuming they had similar app building experience...

    47. Re:Where to start by Anonymous Coward · · Score: 0

      Uh. That's actually a very bad example. A good architect _should_ know how to make a brick, for various reasons. That's like saying a mechanical engineer shouldn't know material science or mechanics of materials.

    48. Re:Where to start by Anonymous Coward · · Score: 0

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

      The debuggers out there will be a LOT less useful to you if you don't have *some* idea about all that hexadecimal gobbledegook. Hell, the only ASM I know is for a CPU I am very unlikely ever to write programs for again, but the understanding I got from it is very helpful. I now have *some* idea what all those opcodes are, what they do, and how they work.

      Not every coder has the luxury of sitting off, insulated from the machine, in design pattern land (although, they ARE another good thing to know).

    49. Re:Where to start by OrangeSpyderMan · · Score: 1

      Amen!! Sorry I have no mod points, but I'll burn a bit of karma to try and get the parent modded up. Insightful, it is indeed.

      --
      Try NetBSD... safe,straightforward,useful.
    50. Re:Where to start by Mycroft_514 · · Score: 1

      >I would argue though, that all applications that I've encountered in my career that have been slow have been slow due to using a stupid design.

      Then you have never run into some of the things that the rest of us have. Why do you walk a set backwards when copying it to a second structure (like when renaming a parent record)? Because walking forward uses x! (That's x factorial) extra reads to achomplish the task, where x is the number of children.of the most costly mistakes I have seen come from not understanding how the underlying system works.

      What it comes down to is that many

    51. Re:Where to start by 3770 · · Score: 1


      Hmm... sorry. I don't understand what you said.

      And I doubt that the algorithm you are talking about actually is x!.

      If you had 1 million CPU's that all run at 10 GHz and each operation in your algorithm takes only one clock cycle your algorithm still wouldn't finish in your lifetime for a set with 25 elements.

      If there are 90 elements in your set the number of operations required to execute your algorithm exceeds the estimated number of electrons in the Universe (10**130, don't ask me how they came up with that number).

      But lets say that your algorithm actually is x!. I'm not questioning that understanding how things work under the hood helps you write better code. I'm just saying that you don't need to get to the level of assembly level for that. You can read about your API and they will explain the algorithms used and that's enough.

      --
      The Internet is full. Go Away!!!
    52. Re:Where to start by NoMaster · · Score: 1

      Agree totally - but then the question comes back to "where to start?"

      I learned asm on a Z80 CP/M machine, then moved to DOS on 8086. Wrote a few things for starters (the usual "add two numbers then write result to screen" stuff), then developed from there. The last thing I wrote in asm was a utility to calculate the optimum interleave on MFM/RLL drives (remember those? ;-) by timing track reads & writes while changing the interleave. Yes, there were other programs that did the same, but they didn't work with the (IIRC) Seagate drives of the time.

      But now, in a world of Windows, OS X, & Linux, I wouldn't know where to start - for one thing, direct hardware access is frowned upon, if not totally banned by the OS. You can still write speed-critical routines in asm, but good C is nearly as fast - besides which, you're just writing a component for another app written in a higher-level language which you also have to learn. The opportunities for writing a whole program in asm have pretty much disappeared - though I guess you could write a CLI calculator or CD player in asm, why would you want to?

      Though, I shouldn't talk - these days, I think people should learn JavaScript before anything else ;-). It's a nice simple language, can be used for object-oriented programming (though it doesn't force it), and can be run in any browser for immediate results. And the fact that it can also be used to create a total dog's breakfast of code is incentive enough to learn to write properly ;-)

      --
      What part of "a well regulated militia" do you not understand?
    53. Re:Where to start by Doctor+Memory · · Score: 1

      Yes -- that's their problem. Face it, no matter how elegant or wickedly clever your algorithm, or how well you manipulate the intrinsics of whatever language you're using...it all gets executed as assembler in the end. And unless you know how assembly language works, you can't make it work for you. Once you learn it, it's like scales fall from your eyes, and those seriously cryptic error messages (the ones that show up just when you think you've finally got your program finished) suddenly make sense.

      --
      Just junk food for thought...
    54. Re:Where to start by Anonymous Coward · · Score: 0

      The author of the post has a point on the above. It is important to learn C but not completly necessary. It all depends on what you want to do. The most single important point that I have learned over the years is to remember that IT stands for INFORMATION TECHNOLOGY. The word technology here is NOT important. INFORMATION is. IT is not computer science. IT is learning how to deal with, well, INFORMATION. You don't need to be an expert in C. You don't need to know the complex issues of inhertience in OOP / OOD. Don't get me wrong, it helps. But if you want to do IT in Corporate, then remember that one thing.

      Most people confuse IT with Computer Science. IT uses Computer Science to manage INFORMATION.

    55. Re:Where to start by Anonymous Coward · · Score: 0

      I think C++ is a must learn for anyone. I also appreciate the suggestion to learn a procedural language before jumping into OOP. Gives you that extra perspective to appreciate OOP, and hey, it hardly takes a few days. Does anyone have any ideas as to subject specific languages. For example, I have heard that Python is a good language to learn if you want to get into AI. What do you say to that.

    56. Re:Where to start by Anonymous Coward · · Score: 0

      Enjoy your eventual dismissal with bad references.

    57. Re:Where to start by gibarian · · Score: 1

      IMO it depends on problem space. If your goal with programming is to better understand how computer works, then yes asssembly language would be a perfect fit for you. Otherwise if you want to use prgramming languages to model systems, you don't need this low level knowledges. ps.: i maybe wrong. i am programming just a few years(i have started with pascal and gone through C, C++, C#, Java, Clisp and ended with Python), and never got really dirty with low-level things.

    58. Re:Where to start by Fred_A · · Score: 1

      You should use Forth then. At least it's somewhat portable.

      --

      May contain traces of nut.
      Made from the freshest electrons.
    59. Re:Where to start by rob.wolfe · · Score: 1

      The problem with the "Specialist/Generalist" conversation as it gets played out here is that it eventually degenerates into a "why C/C++/Java/COBOL/... is the right tool to specialize in". If you are a single language "expert" you are useless to me on a real project unless it is as the project's one expert in that bit of the toolkit. Now think about how many of those jobs there are.

      I want people that have knowledge of the subject matter that is being dealt with. I do not need a room full of language specialists who spend all day discussing how many pointers can dance on the head of a pin or if it is more appropriate to use case or decode in their select statement (yes, I am a database geek).

      Someone earlier hit the nail on the head when they said that it was IT, not CS. I happen to have a CS degree but many very good developers do not. They are folks with degrees in biology, chemistry, physics, math, english, business,... who had a problem to solve at some point and found that they had to write a program to solve it then got hooked on this weird method of making a living

    60. Re:Where to start by torokun · · Score: 1

      Although someone who knows C++ could, as you say, go back to C, I disagree with the educational approach you suggest.

      I don't think it's very easy to teach someone about OO programming before teaching attention to syntax, and good procedural programming thought and organization...

      The best way would be to start with a C-like subset of C++, to teach procedural programming, and then move to C++.

      The thing about OO programming is that it requires a complex balancing act of competing interests -- identifying the 'objective' structure or object hierarchies that make sense for a program, identifying the procedural structure of a program, and merging the two. Some parts of a program make more sense to be done procedurally, some are done through interactions between the functions of objects, and some are done purely by choosing the correct objective structure.

      In my experience, few programmers actually have enough experience to exercise good judgment in putting all this together. This can be demonstrated by the fact that many people who purport to be doing good OO programming think about object hierarchies and patterns in their design, but fail to think sufficiently about functional/procedural diagrams and the procedural flow. Sometimes this results in the commonly-seen massively-overbloated overdesigned OO programming projects we're all familiar with...

      Java is an 'extra' language. C++ is a 'fundamental' language, if you ask me. People learn real fundamental skills by mastering C/C++; thereafter, java is a gimme. And not everyone thinks java's going to enjoy continued popularity in the upcoming years... And you simply cannot write java in java. ;)

    61. Re:Where to start by torokun · · Score: 1

      Let me clarify that -- you can't write a real java VM in java. It would suck.

    62. Re:Where to start by 1iar_parad0x · · Score: 1

      Assembly language won't make you a better 'software architect'. It won't teach you how to solve problems in code. However, a good book on assembly language is a poor-man's computer architecture course. Heck, I'd tell any hobbiest/hacker to learn assembly and pick up a circuits book. If you get pretty good, you'll probably know more about hardware that you average CS graduate.

      However, if you want to learn to how to be a good 'software engineer' or a good IT professional, I'd definitely start with Java or C#. Further, inflaming the Slashdot crowd, I'd probably further recommend C# only because you can build GUI apps with it. Building a solid GUI application gives the beginner a feeling of accomplishment and power. Also, C# is a solid professional component building language. Unlike old-style VB you can build clean code with C#. C# might not be the most 'fun' language. It's about as opaque as lead. Still, from a professional standpoint, C# is a very 'productive' language.

      --
      What do you mean my sig is repetitive? What do you mean my sig is repetitive? What do you mean....
    63. Re:Where to start by EvilSporkMan · · Score: 1

      Is that true even if you built your VM with a compiler that emitted machine code instead of bytecode, such as gcj? I don't know enough about the nitty-gritty of Java to tell whether the language is actually too restricted to write a good VM, or if you just made the mistaken assumption that a JVM written in Java would have to run within a preexisting JVM.

      --
      -insert a witty something-
    64. Re:Where to start by segfault_0 · · Score: 1

      I dont know enough about AI, or if AI is a simple enough topic to say one language or another is better for it. Python is a great general purpose language with a very strongly developed library/API backing it up - recommended for most purposes.

      --

      I was crazy back when being crazy really meant something. (Charles Manson)
    65. Re:Where to start by Anonymous Coward · · Score: 0

      I would much, much prefer an architect who knows EVERYTHING about bricks that are used in his building...how strong are they, how much will they cost, how long will they last, what kind of weather resistance do they have, chemical composition, environmental degradation/recycling concerns,how many will I need, etc., than some idiot architect who knows nothing about bricks.

      Likewise, as someone who knows assembly, I know how EVERY programming language works, and how EVERY progam/app works (and how most viruses/worms/exploits work), down to the binary level, as opposed to someone who knows nothing about assembly.

      Assembly is THE universal language of computers and digital technology. Knowledge of assembly means you know how computers really work, as opposed to someone who does not.

    66. Re:Where to start by (negative+video) · · Score: 1
      Analogies aside, explain to me how knowledge in assembly makes a Java-programmer more productive in a significant way?
      It doesn't. It is a total waste of the Java programmer's time.

      However, it would probably be useful for a software engineer who happens to be working in Java at the moment. There's more in the world than just app servers and office automation, and the average career will last through several business paradigm shifts.

      But it is _not_ the most energy efficient way to learn how to program in a modern environment.
      But what is a "modern environment"? If you were writing a Java game for, say, the Playstation 3, you'd be crippled to know nothing about the nuts-and-bolts of computers.
    67. Re:Where to start by menace3society · · Score: 1

      I wrote a hexdumper in PPC assembler; it used simple READ and WRITE for i/o and statically-allocated storage for data. It worked very well until I broke it trying to add a byte offset at the beginning of every line like most hexdumpers, and I got distracted by other things before ever fixing it.

      If nothing else, it made me appreciate how much work format-printing functions do. Converting a string to a number is relatively easy to implement (just divide and subtract successively smaller powers of x, where x is the base), but converting a number into a string representation is very tricky. I've never compared, but I'll warrant it's probably more simple to convert a number to a base-16 representation and then transpose it into base 10 than it is to convert directly to base 10.

      Why? Well, hell, it's a learning experience, and if you're obsessive enough (not to mention masochistic) to *want* to program, then you'll probably enjoy it, at least a little.

    68. Re:Where to start by menace3society · · Score: 1

      They teach you to think more abstractly, but they don't teach you to think *about abstraction* because they do it all for you and you're pretty much stuck with the abstractions they give you (except LISP; (defun defun nil) anyone? A good example of this is the commutative property of addition. Many high-level languages have overloaded, or allow you to overload, the '+' operator to do string concatenation. This is handy, as "print str1 + ' ' +str2" is a lot easier than "print (str1.cat(' ')).cat(str2)", but it now means that programs using the '+' operator on abstract types can't count on Obj1+Obj2 having the same result as Obj2+Obj1. And how about Obj1+Obj2-Obj2 evaluating the same as Obj1? You could always check to make sure that Obj1 & Obj2 are numbers before making use of mathematical properties by checking their type, but if it's possible for others to derive their own number or number-like classes, then your function might not know about those classes too.

      Contrariwise, because assembly are a lot harder to read, write, and debug than high-level languages, you have to think about what sort abstractions you want to make use of, and an efficient way to implement them. Writing a user-space addition function that uses successive iterations of a primitive increment-by-one (++) routine[1] is thinking very abstract... but the performance will be terrible and probably not worth saving the ten minutes it would have taken to write a more sophisticated addition primitive, and let increment-by-one be a special case of that.

      [1] Yes, some early LISP implementations would do exactly that.

    69. Re:Where to start by Marxist+Hacker+42 · · Score: 1

      You can read about your API and they will explain the algorithms used and that's enough.

      I've yet to see an API explain their underlying algorithims- more often they just give you the calling interface and a brief description of what to expect for output. APIs are black boxes. What Assembly is good for- and ANY assembly language will do, 16 instructions in a simulated 8-bit RISC processor is as good at teaching the concepts as MASM-32- is learning WHY things compile the way they do. Once you've learned that- you're well on your way to knowing how to design your own algorithms instead of just using other people's.

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    70. Re:Where to start by Marxist+Hacker+42 · · Score: 1

      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.

      There's a difference? The whole point of learning Assembly is to learn algorithim design at as low a level as possible, thus making you a better programmer in higher level languages. If your instructor didn't concentrate on algorithim design, then he missed the whole reason we teach assembly to students at all anymore (because any good optimizing compiler can write better assembly than a human being can0.

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    71. Re:Where to start by Marxist+Hacker+42 · · Score: 1

      However, if you are learning GC languages like Java or C#, then ASM is going to end up being a confusing language with no real link to the languages in question (although, both are probably written deep-down in C, at least in the GC/compiler phases).

      Actually, even in GC/compiler languages, understanding assembly can give you the reason WHY, for instance, an unprotected buffer is a security risk.

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    72. Re:Where to start by Bastard+of+Subhumani · · Score: 1
      I find it is better to be a generalist (you normally earn more for a start) [...] In my job if there is a need to learn a specific language I just learn it (may take a week or two) [...] I don't normally program for a living and actually design at a much higher level so I normally tell programmers what is required.
      In other words you don't really know anything, you make the usual pointy-haired assumption that anything you don't properly understand (but that someone else does) is trivial, and you're a manager.

      Am I right, Sir?

      --
      Only three things are certain; death, taxes, and apocryphal quotations - Ben Franklin.
    73. Re:Where to start by 3770 · · Score: 1


      Hmm...

      That doesn't make sense to me. I think you are saying one thing but mean another. People don't understand algorithms any better if you learn algorithms using assembly.

      You might mean that a person knowing assembly will write more efficient code in a higher level language because they will understand approximately what will happen under the hood. Is that what you meant?

      But speed is not even remotely the most important thing in most applications. Robustness and maintainability is. And understanding the order of complexity of an algorithm is far more important than knowing how many clock cycles something will take. Understanding the order of complexity of an algorithm can be done without assembly. In fact, it is easier without involving assembly.

      --
      The Internet is full. Go Away!!!
    74. Re:Where to start by Marxist+Hacker+42 · · Score: 1

      That doesn't make sense to me. I think you are saying one thing but mean another. People don't understand algorithms any better if you learn algorithms using assembly.

      I did. By a LONG ways. Nothing teaches boolean logic, iterative looping, bit shifting shortcuts, and bit masking like learning assembly. All of which are neccessary for good algorithm design.

      You might mean that a person knowing assembly will write more efficient code in a higher level language because they will understand approximately what will happen under the hood. Is that what you meant?

      Partially- though the closer we get to the perfect optimizing compiler this advantage is slowly getting wiped away. But also- it gives you an idea what all computers do natively and best- and allows you to design new algorithms that fit the best optimization of computer vs user workload.

      But speed is not even remotely the most important thing in most applications. Robustness and maintainability is. And understanding the order of complexity of an algorithm is far more important than knowing how many clock cycles something will take. Understanding the order of complexity of an algorithm can be done without assembly. In fact, it is easier without involving assembly.

      Ideally, your algorithms should never need to be maintained- they should be nice, small, wide-scope black boxes that you or someone else can assemble into higher level code- libraries that become APIs. I'm talking about the difference between a programmer who uses APIs and one who is able to create new APIs. The first only needs to know the complexity of the object model- the second should have a good feel for how machines operate. It's the difference between merely being a coder and being a software engineer.

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    75. Re:Where to start by 3770 · · Score: 1


      Assembly is one way to understand algorithms. And if that is how you learned algorithms, then you'll remember that as when the "coin dropped". But that doesn't mean that it is the best way, or even a good way, to learn algorithms in general.

      But man, this is like upside down world. I guess we'll have to agree to disagree. I don't even understand what possible use an API creator might have from knowing assembly. Either you thought assembly was/is fun and overestimate the value of knowing assembly, or it was so long ago that I dabbled with it that I forgot how it was to not know assembly.

      --
      The Internet is full. Go Away!!!
    76. Re:Where to start by Marxist+Hacker+42 · · Score: 1

      The last time I actively programmed in Assembly was in the mid 1990s- on a Verifone, and even that was to interface it to a VB GUI. But that's not what I'm talking about.

      A good understanding of algorithims requires an excellent command of basic Boolean mathematics, memory management, and excution order. While other, higher level languages can provide both of these, no higher level language I know of combines both concepts at once- either the optimizer handles the logic and mathematics for the programmer, or the optimizer handles the memory managment for the programmer, or the operating system handles the execution order. It is only when you are programming at the lowest level possible that you get a good handle on all three; the API programmer who doesn't have a good handle on all three will create security holes with their bugs. I strongly suspect that's where buffer overflows came from originally- an API programmer who did not have a good handle on memory management and program executution because they let the operating system and the higher level language do it all for them, for instance.

      I'm not sure I agree with the idea that it should be a FIRST language- the work to reward ratio is too great for that, a good first language should give instant gratification. But I'm absolutely resolute on the idea that the difference between a good programmer and a great programmer is a knowledge of basic assembly and machine architecture on a low level. What value that is to the end user is getting more questionable all the time- this is after all the type of "deep and narrow" knowledge that artificial intelligence is good at, and so as time goes on our optimising compilers are getting better and better at removing this knowledge from the realm of humans entirely. One day API programmers will no longer be neccessary at all- the compiler's built in object model will do everything anybody could ever want, and scan works such as wikipedia to build new functions as new research models of our universe come out. But we ain't there yet- and so I still recommend assembly for young programmers.

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    77. Re:Where to start by Mycroft_514 · · Score: 1

      You can doubt, but the algortihm is x! Where the number of I/os is: x * x-1 * x-2 .... * 1 And this is I/Os which is why you must be so careful in that case to walk the set linkage backwards.

      And an API is just the form that data is passed back and forth. It is the underlying I/O s that will kill you. And those you need to know what is going on under the hood, usually with a mind towards assembler.

      Or another example. Years ago, consultants didn't know about commits. Their code ran fine in test, and then the first thing I know they are running prod. After 5 HOURS they got worried. Of course the system lock table was almost full by then. At 6 hours, the table filled, the job abended and spent 6 hours rolling back.

      You can know all the high level language int he world, but the underlying items will KILL you.

    78. Re:Where to start by 3770 · · Score: 1

      Thanks for the reply.

      But I'm very intrigued now. Can you explain why that algorithm is x!. I can't figure that out from your original description.

      I'm curious because I can't even think of a scenario where I am even remotely at risk of producing an x! algorithm.

      --
      The Internet is full. Go Away!!!
    79. Re:Where to start by Mycroft_514 · · Score: 1

      If you have a linked list and you want to copy the linked list to a new location (i.e., the parent name changes), then you have to copy the parent record, retrieve child one, the change current to parent 2, store child 1. Now return to parent 1, move forward thru the linked list to child 2 and retrieve child 2. Now change to parent 2 and read past child 1 to store child 2 (2 I/os). As you add each child, your i/o string gets longer, and it works out to be x! i/os

      If, on the other hand, you move backwards thru the list, then each store is done at parent 2, eliminating reading thru the second linked list to do the store. (And if you just store at the parent, eliminating a sort each time you store the new record by going backward thru the list) Each sort takes longer than the one before and so forth.

      This all happens when you have a sorted set in a Network DBMS.

      Even a mainframe can feel the i/os when you get any distance into a factorial. I could see the performance difference at 10 records in the linked list.

      Been 15+ years since I did one of these.

    80. Re:Where to start by 3770 · · Score: 1

      Thanks.

      I think that what confuses me is that you are talking about parents in a linked list but I'm used to calling things parents when talking about a tree. And you are also talking about a set which also throws me off a bit.

      But it sounds to me as if what you really are talking about is a linked list where you can traverse in any order, but appends are slower than prepends since it needs to traverse the list. Although, I think that you aren't really talking about a linked list in memory since you are talking about IO's.

      Does that represent your problem?

      In that case the first append would take 1 IO, the second would take 2 IO's and the last one would take n IO's. Is that correct so far?

      So, that is the sum of 1 + 2 + 3 + ... + (n - 1) + n. This can be rewritten as (n * (n-1)) / 2 and that is then an operation of n square, or O(n^2).

      This is still very poor performance, and inserting in an unsorted list should never be worse than O(n).

      You also say that for a list of 10 elements you could see a difference. I don't quite know how much an IO costs in your environment. But for 10 elements O(n) becomes two IOs, O(n2) becomes 100, but O(n!) becomes a staggering 3628800. And if you ever saw it finish with a list of 20 elements then it can't have been O(n!) because it wouldn't finish in our life times no matter what computer you have (at 1 billion IO's per second it would still take 70 years)

      Let me know if I still misunderstood.

      Thanks for a good discussion.

      --
      The Internet is full. Go Away!!!
    81. Re:Where to start by I_Jonny_I · · Score: 1

      I got stuck using Lyx for documentation at my job, which is a UI tool that generates LaTeX. I am not sure if error's are inherient from the LaTeX, or just apear once Lyx has generated it, but that software is a nightmare. I can't for the life of me understand why anybody would want to use a program that causes you to compile plain text, and wastes your life making you debug your documentation. It is highly touted by my boss though, who enjoys how it will generate a Table of Contents, headers, as well as insert graphics, for warnings and notes. As well it will allow you to move sections to a new location without worrying about reupdating your table of contents and page numbers. But there has to be a better solution than LaTeX, that impments a XML/UML format.

    82. Re:Where to start by 3770 · · Score: 1

      Wow,

      Finally someone that has a clue.

      Thanks.

      --
      The Internet is full. Go Away!!!
    83. Re:Where to start by 3770 · · Score: 1


      A clarification and a correction:

      1)"inserting in an unsorted list should never be worse than O(n)"
      For n elements.

      2) "But for 10 elements O(n) becomes two IOs".
      Should read 10 IOs.

      --
      The Internet is full. Go Away!!!
    84. Re:Where to start by tepples · · Score: 1

      I've yet to see an API explain their underlying algorithims

      The documentation for Java SE collections gives some guarantees about running time. For instance, adding an element to an ArrayList is O(1) amortized, and searching a TreeMap is O(log n). In fact, TreeMap documentation states that it uses a red-black tree.

    85. Re: Where to start by JavaGeezer · · Score: 1

      Start out with Visual Basic. It's easy. It's fun. You get introduced to databases and alot of other concepts in IT. There's a cute little debugger. Dipping into the code, you learn BumpyWord naming conventions, dot notation. If you find that you like coding, you will be motivated to learn C (or C# or C++). If not, you'll have learned enough to make you dangerous in MSOffice.

    86. Re:Where to start by Anonymous Coward · · Score: 0

      Ward Cunningham, David Garlan, the four GOF, Fred Brooks, Donald Knuth and thouthands more. You do need to be very smart to keep a life as a SW engineer and enjoy it a lot.

  2. Learn by doing. by Anonymous Coward · · Score: 0

    Start a complex project. And read some computer science books. And learn how to design a good user interface, we can never have too many of you guys!

  3. Best place to start by Anonymous Coward · · Score: 0

    The best place to start is in your youth.

  4. 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.

    1. Re:look under the hood by tezbobobo · · Score: 1

      Yeah, I think that is correct. After all, most tools can be used for most jobs. In the beginning, choose the appropriate tools for the job. After a while you should have enough skills to be able to work at any project, provided it's not completely out of your realm of experience. For example, C is a powerful language but not well suited to creating platform independant applications. It can be done though. Eventually it will become easiest to use what you know best.

    2. Re:look under the hood by Analogy+Man · · Score: 1
      Definitely go a layer deeper and work to understand why you would use Perl in one instance and Java script in another.

      I have seen bad Fortran code written in a wide variety of languages. Strive to move beyond the syntax.

      --
      When the people fear their government, there is tyranny; when the government fears the people, there is liberty.
  5. missed one step though... by Anonymous Coward · · Score: 0
    man man

    :)

    1. Re:missed one step though... by Anonymous Coward · · Score: 0
      And for the gay hopefuls:

      man mount

    2. Re:missed one step though... by toadlife · · Score: 1

      man hier is good one too in *BSD. Do they have that in linux distros, and more importantly, if they do, are they up to date/accurate?

      --
      I don't always use unix-like operating systems; but when I do, I prefer FreeBSD.
  6. Pick something you are interested in by Anonymous Coward · · Score: 1, Insightful

    Easy. Pick something you are interested in and can hold you attention for a few minutes. Then figure out whether you are in it for the short-term or long-run. The start reading up on the classics like http://www.norvig.com/21-days.html, the Mythical-Man Month, and Peopleware.

    Cheers.

  7. Learn the basics by Anonymous Coward · · Score: 0

    Learn the basics of a couple of programming languages and then get experience. Being a programmer or an IT specialist are both like being an auto mechanic. You can learn a lot from the books, but you'll learn a lot more from experience--especially if you have a good mentor.

    Your goal at this point in time should be to have enough knowledge to at least get in the front door. And if possible, work at a non-Windows shop that makes custom applications. You'll learn more.

    Oh, and I forgot, if you have time, learn electronics and assembler. Both of those will help out way down the road once you have to deal with many subtleties in the world of computers (of which there are many).

  8. 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 FeSceptre · · Score: 0, Troll

      It is far, far too late for you. Get prepared for a mediocre middle-management IT job that barely relates to IT. Every successful bloke in the true IT community has already dedicated himself to his dream, his passions, and therefore creates his future path. If you've done nothing, no demos, no experiments, no anything... give it up to a life of mediocrity.. THere are far more well dedicated with the obsession for creativity and desire for knowledge that blokes who ask questions like yours never will understand.

    2. 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. Re:DIY by Anonymous Coward · · Score: 0

      MySQL is not a real database (just read the manual and if you still don't get it you never will). PHP is for script kiddies.

    4. Re:DIY by alfs+boner · · Score: 1, Insightful
      Also, I'd avoid relying on advice from toxic communities for the naysaying unwashed masses. A majority of the people here are socially retarded high-schoolers or best-buy wage slaves who think Indians are the reason they don't have $75,000/yr programming jobs. The prevailing attitude in this forum is: "my life is shit. why should you have it any better?" Make sure you're casting a wider net.

      Also, make friends and NETWORK. Be a person that other people want to spend time with. Four years ago, all I knew was a little html and I got an awesome programming job because I knew someone. You can buy those o'reilly books AFTER you've landed the job.

      Good luck :)

      --
      Listen p*ssy. I'm sure your the same homo that posted earlier about alf's boner and you just want to remain anonymous fo
    5. Re:DIY by Catbeller · · Score: 1, Funny

      1. Be born to the right parents.
      2. Go to right schools.
      3. Use lifeling contacts of parents and school to get swell jobs.
      4. Make friends at job contacts got you, move up to management.
      5. Become an executive.
      6. At every stage, blame others for being limited and uneducated.

    6. Re:DIY by gFool · · Score: 1

      Have you ever installed Gentoo? You need to read a book to do it (the Handbook). It also gives you a good idea of what goes into the programs you use because it compiles them all bottom up. I agree though. Nothing beats reading... My latest are 'Pattern Oriented Software Architecture' and 'C++ Network Programming'. Both related and both awesome.

    7. Re:DIY by Anonymous Coward · · Score: 0

      postgresql is a good alternative to mysql - much better license, ordbms from the ground up.

      python and or ruby is an alternative to php. rails is a ruby framework that is making a lot of noise. if you study rails, you will learn what it took others years to figure out.

      php isn't bad - but might not be the most efficient way to skin a cat, as it were...

    8. Re:DIY by alfs+boner · · Score: 1
      I care about your feelings, I really do.

      :)

      --
      Listen p*ssy. I'm sure your the same homo that posted earlier about alf's boner and you just want to remain anonymous fo
    9. Re:DIY by dakryx · · Score: 1

      The handbook is a basically a series of commands to type in. Thats not a handbook thats a howto manual.

    10. Re:DIY by Otter · · Score: 1

      In general, a lot of these responses come down to "The most obscure thing I know is the most important thing everyone must know!" Whether it's installing Gentoo, coding in assembler or studying automata theory -- that becomes the dividing line between the unwashed masses and the computing elite.

    11. Re:DIY by dubl-u · · Score: 1

      play around with MySQL and PHP

      This is close, and the particular technologies don't matter a ton. But don't play around. Set out to make something simple that people will use. Maybe it's a to-do list just for you. Maybe it's a scheduling tool so your and your Quake buddies know who's up for a game when. Just make something ultra-minimal that works and gets use.

      The essence of the profession is making things for people to use. Start with that focus and never let it go. The technologies are seven kinds of cool, but are secondary, not ends in themselves. If you want to do great work, you'll also need to understand people, how they use things, and how to build to last. As long as you focus on shipping software, even if only to yourself and a few pals, you'll have a million opportunities to dig in deep to interesting topics.

      Were I setting up a novice today, I'd get them going with Ruby On Rails. It's easy to get started, will keep you from certain bad habits, and has many interesting avenues for exploration. But the important thing is to ship early and often, trying new tools regularly.

    12. Re:DIY by sedyn · · Score: 1

      "But being a linux fanboy is not the answer to every f'ing question posted to /."

      Yeah, the other acceptable answers are that corporations and alliances are greedy, politicians and managgers are stupid, apple is awesome, and CS != IT.

      --
      Am I open minded towards open source, or closed minded towards closed source?
  9. 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"

  10. 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.

  11. Learn a little about everything by m-wielgo · · Score: 1

    Learn about different interest areas and use them to your advantage. You do not always need to know the inner-workings of something to use it effectively, saving you time and money.

  12. 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
    1. Re:Generalist, or specialist? by Anonymous Coward · · Score: 0

      I want to be a Nigerian specialist-generalist who organizes multi-conferences on epistemological paradigms and interdisciplinary approaches to cybernetics, systemics, and informatics.

  13. Start with HTML by Anonymous Coward · · Score: 0

    As a college student working toward a BS in Computer Science and sneaking in an AAS in Web Design, here is my suggestion.

    If you want to do web technologies primarily, then start with HTML. Since you will use this in almost every other area which you want to learn, become comfortable with hand coding html.

    Second, setup a Linux box to act as a development server. This will force you to learn how to work within the *nix world. In the interum you can use XAMMP for a nice bundled Windows package with Apache, PHP, MySQL, etc.

    Next, learn some foundational OO language. The two staples are C++ and Java, though there are many others. Once you become comfortable with one language you will find that most other languages are pretty much the same.

    Finally, go learn one dynamic web programming language then when you are comfortable with it learn others.

  14. Wrong focus, perhaps by johndiii · · Score: 2, Insightful

    You have a whole list of tools. What you need to learn are design skills, how to abstract, how to put together a piece of software. What quality is, and how to go about getting there. As was mentioned, learn how to put together a good UI.

    Yes, you have to learn tools. But be aware that there is more to it than that, that your ultimate success of failure will depend on your vision, not the facility with which you use your tools.

    I am reminded of the amusement of a master carpenter when confronted by an apprentice with a shiny new box of tools. You will, at some point, learn how to use a hammer. But knowing how to use a hammer does not teach you how to build a house.

    --
    Floating face-down in a river of regret...and thoughts of you...
    1. Re:Wrong focus, perhaps by cubicledrone · · Score: 1

      I am reminded of the amusement of a master carpenter when confronted by an apprentice with a shiny new box of tools.

      I'm amused that people still remember apprentices, since business has turned its back on the entire concept. There is no such thing as an "apprentice" any more except as a gimmick for a television show that makes sport out of the suffering of others. Businesses have no use for apprentices, because they expect someone else to pay for training their experts.

      --
      Business isn't willing to pay for products, innovation and careers, so we get brands, mortgage commercials and layoffs.
    2. Re:Wrong focus, perhaps by KillaGouge · · Score: 1

      I, for one, was an apprentice. I just recently moved up to Journeyman. I'm in the Air Force, and they still use that system. You start out as a trainee, then move up to apprentice, journeyman, craftsman, and I do not remember the the title used for the last one.

      --
      GENERATION 25: The first time you see this, copy it into your sig on any forum and add 1 to the generation. Social exper
    3. Re:Wrong focus, perhaps by Kuxman · · Score: 1

      master?

      And shouldn't you know what your ultimate goal is?

      --
      http://www.asti-usa.com
    4. Re:Wrong focus, perhaps by KillaGouge · · Score: 1

      No, the Air Force doesn't use master, it is Superintendent.

      --
      GENERATION 25: The first time you see this, copy it into your sig on any forum and add 1 to the generation. Social exper
  15. Having a purpose of end product... by bucktug · · Score: 1

    For me it has never been enought to know the technology... I had to have a project to work on. So the place to start is to define what you want to do.

    Everything is built on top of something else. Every idea comes from someplace. And if you know what you want to do then you can investigate stuff that is at its base what it is you want to accomplish.

    Best places to start W3 Schools...

    That covers the basics of everything.
    I work in Flash quite a bit and people ask me where to start learning flash. With the project learning method I send them to http://gotoandlearn.com. The tutorials on that site use some of the industry proven Actionscipt methods and give a good base level knowledge.

    So find a project and get cracking.

    --Chris

    --
    I had a flame... but she had a fire.
  16. Learn how to learn by OakDragon · · Score: 2, Insightful
    That's my best advice, learn how to learn. As others (and you) have said here, there really is too much to even pick from.

    OK, for practical advice, learn 1) an object-oriented language like Java, C# or C++. Nowadays, even PHP is OO, if you want it to be. But with Java, you can't even write "Hello World" without acquainting yourself with classes and objects.

    Learn relational databases, including normalization. You would not believe how far ahead this will get you.

    1. Re:Learn how to learn by newt0311 · · Score: 0
      I would have to disagree with trying to learn java for a starting language. It si too limited in ficus and there is nothing special about objects. They are just records: things people had back in the 1985 but never used until 1990 in c++. Objects only became popular with java because they were an easy marketing tool.

      The basics of programing are not in objects or syntactical structures but that is what java will try to teach you. The basics of programming are in telling the computer what to do in a simple and organized manner. The forced object oriented nature of java and the variable typing just get in the way and cause a headache. In a corparate environment, this is a secondary concern and the way java forced inept programmers of write decent code is more important (that and the fact that it already is popular helps minimize feature copies and ensures that you won't be fired if you suggest java no matter how stupid a decision it is) but for learning, it is possibly the worst language you can think of.

      For example: java does not have several useful capabilities like function pointers, advanced types (think python dictionaries) and most of the reflection capabilities are locked up in the obscure reflection libraries which are not even supposed to be used by anybody other than java IDEs and debuggers etc. even though these techniques are very useful. (if anybody thinks function pointers are not useful, just try writting a GUI program in JAVA and you will suddenly wish that you had them).

      Start with an advanced language like Python and LISP. Both these languages have interactive interpretters which means that you can try out your code on the fly, are well documented, and come with every Linux distribution out there. These languages also have very advanced capabilities and do not force the programmer to use a certain style and let the programmer do what suits them best.

    2. Re:Learn how to learn by Anonymous Coward · · Score: 0

      Functors in C++ and "function objects" (as Effective Java calls them) in Java give you compile-time checks that are far more useful than the handful of keystrokes you save using function pointers.

  17. 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.

    1. Re:DO by JonathanR · · Score: 1

      +6 Insightful

    2. Re:DO by Runesabre · · Score: 1

      I agree. Best way to learn a technology is to actually use it for some greater, useful purpose. Find a project for yourself, set a goal on what you want to accomplish (if the goal(s) haven't been set for you) and then do it with whatever technologies you think will (or assigned) accomplish the goal.

      --
      Runesabre
      Enspira Online
    3. The above is great advice for you, ariastar, given what you said about your learning style.

      Here's a refinement. After you do a project, write down a few paragraphs about what was awkward, what felt like it took too much time, and what new concepts and tools you would invent to make the job easier. Then pick up a related book, preferably a textbook rather than one of those shovelware man pages between covers. Reading the book will be a much better experience, more fun and more useful.

      Or, conversely, when you read a book about Lisp, Prolog, or Haskell, invent a project that will put your new knowledge to use. Keep the book close, you'll lneed to reopen it many times.

      Sign up for O'Reilly's Safari program.

      Purge all interruptions from your study area. You want to be able to get into a "flow" state of consciousness. It's more fun, it lets you learn faster, and it's instantly destroyed by IM popups, ringing phones, girlfriends and so on.

  18. 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 ]
    1. Re:learn by solving *your* problems by jthill · · Score: 1
      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.
      That's the most cogent statement of that principle I've ever encountered.
      --
      As always, all IMO. Insert "I think" everywhere grammatically possible.
    2. Re:learn by solving *your* problems by SamBeckett · · Score: 0, Offtopic

      My momma says aligators or ornary 'cause they've got all them teeth and no toothbrush.

    3. Re:learn by solving *your* problems by WinterSolstice · · Score: 1

      I totally agree - I had the worst time learning how to skate until I got talked into a game of roller hockey. I obviously got my butt kicked, but I learned to skate better in that hour than the previous 4 trys.

      -WS

      --
      An operating system should be like a light switch... simple, effective, easy to use, and designed for everyone.
    4. Re:learn by solving *your* problems by slapout · · Score: 1

      Well said.

      --
      Coder's Stone: The programming language quick ref for iPad
    5. Re:learn by solving *your* problems by cytg.net · · Score: 1

      ++; well said.

    6. Re:learn by solving *your* problems by ChrisMaple · · Score: 1

      Solving your own problems is good, but you have to be aware that because this technique is not systematic, it may leave important gaps in your knowledge. Be aware of those gaps and fill them when it's appropriate to do so.

      --
      Contribute to civilization: ari.aynrand.org/donate
    7. Re:learn by solving *your* problems by Zunni · · Score: 1

      If the original poster reads one response.. Let it be the parent to this comment. It's 1000% accurate. I wanted to learn C++, (for a multitude of reasons) and while I had read text after text about the syntax of the language, I still found myself 'lost' while reading SDK's. So I took the time one day to come up with a project that would require me to code something 'real' in C++ using a SDK (Half-Life 2 mod for those interested). Now while I work on various aspects of my game it forces me to learn practical applications of the syntax I read about before. Now is my code as clean as it could be? Probably not.. The most efficient code ever written? Nope. But I now have more of a working knowledge of C++ than I would have ever had by simply reading text books.

    8. Re:learn by solving *your* problems by rihjol · · Score: 1

      I largely agree with what was said... you definitely gain the most from struggling through problems on your own. Doing examples where the solutions are provided don't help much beyond giving you some references.

      I will say, though, that the problems you do don't need to be personal pet projects. It's fine to learn through doing assignments from books, etc., just so long as you have to solve it yourself--the answers aren't supplied for you.

      --
      I like bread.
    9. Re:learn by solving *your* problems by jem86 · · Score: 1

      I couldn't agree more. When I first started learning PHP I read through my books, looked at code and followed the examples of many tutorials and yet still felt like I hadn't learnt a thing. It wasn't until I started creating projects to solve issues I was having that I actually got into it and taught myself anything of use.

      There's no point just reading a book if at the end of it you can't put any of it into context to create something.

    10. Re:learn by solving *your* problems by usidoesit · · Score: 0

      I used to think that but got into trouble, you need to drill the fundamentals. Very bad advice that is. I wonder if the OP actually did that. I never see anyone writing books on that approach. What you see instead is the Total Immersion approach, you see it in swimming, skiiing, rollerblading. Drills which break down a complex skill into something learnable. I think the OP may have a lot of skill they take for granted. In other words they can do it, but don't know the fundamentals.

    11. Re:learn by solving *your* problems by usidoesit · · Score: 0

      I agree with your last sentence, but your approach to skating is slightly reckless? Skating is a complex skill that needs to be broken down into drills to learn the fundamentals. I can see your point though.

    12. Re:learn by solving *your* problems by linvir · · Score: 1
      What an incredibly geeky idea. Broken down into drills? Holy Liver Cancer, Batman! I've been into all sorts of moderately extreme sports, among them skating, skateboarding, karting and basketball, and none of them were learned through drills (and yes, I've done okay in all of them, with a few trophies/medals to show for my efforts in basketball and karting).

      Drills are useful, especially in a team sport like basketball where they are vital for true competitive success, but a complex skill on its own doesn't necessarily require drills.

    13. Re:learn by solving *your* problems by usidoesit · · Score: 0

      This attitude is typical of most of my students. They don't believe in drills. Even when they finally get a concept after doing a drill that is designed to heighten the problem to be solved (the problem they are having), so that it forces them to focus on that one problem and solve it using their own natural ability to learn. Even after they use them successfully, even after they create them for themselves, they don't believe in the concept of drills. What is "chasing a tennis ball" but a drill? It will teach, perhaps, flow and effective application of whatever has been learned so far. If there is a teacher involved in explaining something, then drills are required to define terms and concepts, like "edges", "pressure", we're talking the stuff you probably take for granted. A lot of people aren't at the level you take for granted.

    14. Re:learn by solving *your* problems by linvir · · Score: 1
      create them for themselves
      Damn right. People create their own little drills on the fly all the time. I know I certainly do. In fact it's almost all I do. I didn't even realise it until I read your post, either.

      It's incredibly easy to forget about all those hundreds of cack handed standing shots from underneath the basket (or whatever), and assume that all the growth came from the fun stuff. Probably because the magic moments only occur once you've managed to drop the rote memorisation, so you natually make the link between the two things.

      With this in mind, the main original post about skating might have worked better if instead of 'chase a ball', he'd said 'walk'. Seems more analagous to echo "Hello world!"; now.

  19. 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.

  20. 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.

    1. Re:PHP by Anonymous Coward · · Score: 0

      I've also been suggesting the PHP approach. It's an easy language, and once you kow how to do PHP loops/conditions/functions/etc, you also mostly know how to do it in C/C++, Java, VB, etc.

      Plus it's easy to put up a simple interactive web site.

      I would also recommend going to Sourceforge and downloading the code for various programs and trying to figure out how they work!

    2. Re:PHP by Vorondil28 · · Score: 2, Insightful

      I admittedly haven't done much work in PHP, and quite a bit in Perl, so take the following with a grain of salt.

      I agree that a budding programmer should start with a language that's, simple, not so simple it makes is useless for much more than instructional purposes (my main gripe with BASIC), and widely supported/used. Now, PHP fits those three pretty well, but I'm of the opinion that more general purpose languages like Perl (including Python, Ruby, etc') are going to be more beneficial in the long run. Perl not only can do everything PHP can do (the CGI stuff) but lots of other not-necessarily-web-related things. There are so many ways you can go once you know the basics of it. Why limit yourself early on?

      Now, I don't want to trash PHP. I'm sure it's a lovely language and I'm sure it may do x far better than Perl and others can, but when you're implementing your first bubble-sort, those kind of language-specific pros/cons are a long way down the road.

      Eh, just my $0.02.

      --
      This sig rocks the casbah.
    3. Re:PHP by tehshen · · Score: 2, Insightful

      PHP, eh? I'm sorry, but PHP has its own set of bizarre quirks, that most people who know PHP can't shake off its bad habits. Inserting code in HTML is nice for web development, but nasty for everything else (most things that a new coder would be doing). Waaaaay too many functions that are very inconsistent that would confuse someone who doesn't know which one to use. Magic quotes are sadly still there, "Why are there \s in my words?". You may think that PHP's nice for web development, but don't start the guy off on the wrong foot.

      I would learn something like Perl or Ruby or Python, which still have your advantages {interpreted, string manipulation, file handling, and not overly complicated}, and the added advantage of being good.

      --
      Guy asked me for a quarter for a cup of coffee. So I bit him.
    4. Re:PHP by kestasjk · · Score: 1

      The problem is those languages are all a bit strange. The main languages (arguably) are C, C++, Java, C#, and maybe JavaScript+PHP depending on whether you're going into web dev.
      All these languages use the same sort of syntax, they vary as regards datatypes, libraries and objects, but the syntax is pretty similar.

      I wouldn't say PHP is the best starting language (the sloppy datatypes and quirks), but I'd definately start with one of the main languages which use the same syntax, not something like Perl, Ruby or Python which have strange syntaxes which won't really be useful elsewhere.

      --
      // MD_Update(&m,buf,j);
    5. Re:PHP by alan.briolat · · Score: 1

      I know its popular to trash PHP, but as someone who has been using PHP for 2.5 years now I can honestly say that something like PHP5 is actually quite a good language when used properly. And that means applying proper design patterns yourself - the downside of PHP is that it does not force you to do things right, but it does allow you do things right. The turning point for me was probably when I took a break to learn C++, then came back to PHP- suddenly I had picked up a whole new load of practices which made things significantly "better".

      My argument against Perl is that it is WAY too strange for a first language - the syntax is nothing like any other language. If you learn something like PHP first (like I did), the syntax is pretty much portable to 2 of the "big" languages (C++ and Java). As for the other 2, they are on my todo list, but from what I have seen the significance of whitespace in Python could get irritating...

      --
      I swear we should be allowed to give mod points to sigs... "-1, Offtopic"
    6. Re:PHP by Beale · · Score: 1

      Similarly, I know Perl is a powerful language, and people love it because it can do everything, everyway. However, I think that doesn't necessarily make for a good teaching language - the open-endedness (if you get what I mean) can confuse beginners.

    7. Re:PHP by Vorondil28 · · Score: 1
      I get what you're saying, but I think that open-endedness might be valuable to a teacher when used correctly. For instance, you can start with a very simple, subroutine-less program like:
      #!/usr/local/bin/perl
      print "Welcome to a program.";
      print "This statement is executed...";
      print "Then this one is.";

      exit;
      Then when you introduce subroutines, you can implement the same program with them:
      #!/usr/local/bin/perl
      print "Welcome to a program.";
      &DoStuff();
      print "Then this one is.";

      sub DoStuff() {
      print "This statement is executed...";
      }

      exit;
      I think the flexibility could be useful in that programs can be as simple or as complex as you want them to be. There's not as much perquisite instruction before you get to a functioning program. (Think about all the stuff you need in a C++ program before it will even compile and think about how little you need for a Perl program to parse and run.) Then again, I'm not an Ed major, so that just might not work. :-P
      --
      This sig rocks the casbah.
    8. Re:PHP by An+Onerous+Coward · · Score: 1

      Whitespaciness isn't a big issue with Python, so long as you're writing with an editor that understands that you're writing Python. If you use the same amount of indentation for each block, you'll be fine. Use Notepad, and mix tabs and spaces literally, and you'll soon find yourself hunting down some very confusing bugs.

      --

      You want the truthiness? You can't handle the truthiness!

    9. Re:PHP by a10waveracer · · Score: 1

      Having started learning how to code last year just by using PHP, I can say that it is a pretty good language to start out with in terms of learning the basics. The error codes make you learn how to do stuff correctly (insofar as bracketing and whatnot) and allowed me to easily branch out. The most beneficial thing I did while learning PHP, however, was to find someone to partner with on a project. Then they were able to smack me upside the head when I did something incorrectly, and showed me a few cool tips. I have since been able to move on and learn other languages at a decent pace. I can't say it is the best language to learn first, but it isn't the worst choice (I had experimented with different languages before, to no advail)

    10. Re:PHP by Sentry21 · · Score: 1

      Waaaaay too many functions that are very inconsistent that would confuse someone who doesn't know which one to use.

      Almost all of which are named exactly the same as the underlying library functions they represent (e.g. mysql_escape_string() and mysql_real_escape_string() are wrappers for the same functions in the mysql client library) - blame library developers for this one. The extension writers are consistent, it's their sources that aren't.

      Magic quotes are sadly still there

      And disabled by default. If you enable them, it's your own fault. If your hosting provider does, it's their fault. Don't blame PHP for having deprecated features that idiots can still enable.

      I would learn something like Perl

      Which doesn't have the (common in every other language) switch/case construct? Which has the do...unless construct, which I've never heard of before? Which keeps track of state like output buffering in variables like $| ? Perl may have its uses, but as a first language, I'd never recommend it in a million years. It's as though the language was designed to encourage bad habits, and that's not a first language I would recommend.

    11. Re:PHP by Alan+Shutko · · Score: 1

      Why limit yourself early on?

      Hmmm... he's going to learn more than one language anyway... who cares if the first one is limiting? I started with Commodore 64 Basic. THAT was limiting. I've learned a whole lot of others over the years, and they've all been limiting in one way or another. Trust me, Perl limits how you think in a whole bunch of ways.

    12. Re:PHP by tehshen · · Score: 1

      Almost all of which are named exactly the same as the underlying library functions they represent.

      I know this, and it's just an excuse. "The bricks for this house are all misshapen!" "Well, the people who made the bricks made them how they used to." "So the house will fall down!" "But... people... not my fault..." Every other language I know has functions that are consistent, either likeThis or likethis or like_this. Only in PHP is it all three.

      And disabled by default.

      Really? I have never, ever seen them turned off by default. Except in PHP6, but that isn't released yet.

      switch/case construct

      That annoys me too. There's probably a reason for it, albeit not a very good one.

      do...unless construct, which I've never heard of before

      Me neither. If it exists, it probably does something unless something is true. Surely you can work that out!

      It's as though the language was designed to encourage bad habits, and that's not a first language I would recommend.

      I'd agree with you here, if you were talking about PHP. (Sure, Perl is a bit mushy, but that's not the point). PHP does have its share of bad habits: Only two scopes (global and function, this gets me every time), how you don't need to declare variables (why is my variable not being updated?), really, really weird arrays that combine lists and hashes, etc.

      Besides, Python and Ruby are still nice.

      --
      Guy asked me for a quarter for a cup of coffee. So I bit him.
  21. 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."
  22. Unix by linguae · · Score: 1

    I'd learn Unix first. Download yourself an emulator (I'm not telling you to switch to Unix) and a Linux or FreeBSD distribution (or open up Terminal.app if you have a OS X Mac), get yourself a Unix book or online Unix tutorial, and start learning some basic Unix commands. Once you are bored with ls, grep, and friends, learn how to set up X11 and basic system administration skills. Having a grasp of Unix will help you out in a lot more areas than one would imagine at first.

    Much of computer technology (scripting languages, web development, etc.) seems to revolve around the ideas of Unix, even if you're doing all of this stuff on a Windows box. Learning Unix is very beneficial, even if you end up hating it and stick to Windows as your desktop OS. Learning Perl will also be much easier coming from a Unix perspective rather than coming from a Windows perspective.

  23. where to start by Anonymous Coward · · Score: 0

    $man man

  24. 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!

  25. One language/platform at a time by dcam · · Score: 1

    Work through things, one language or platform at a time. Pick a language, one that will help your learn good programming habits and let you pick things up quickly. I'd recommend not starting with some languages (perl, VB6, asm) under any circumstances, maybe something like python. Then use the language to expand into another area, eg HTML (generated by python), and CSS. Then possibly javascript, expanding in AJAX.

    There are real advantages in learning something thoroughly, and what you learn often applies well to other things you learn.

    If there are some things that would be well worth learning:
    - C
    - C++ (particularly the STL)
    - a scripting language
    - HTML/CSS/Javascript

    --
    meh
  26. 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.

    1. Re:So many responses, so much BS by Anonymous Coward · · Score: 0

      assembler? why not start out with maths and physics first? them move up to electronics and the such. and dont't forget the holy scriptures and valium in between for soul nourishment.

      no, really... my thoughs are that the man should pick a project and get it done using the good old try and error method. then move on to the next project and repeat...

    2. Re:So many responses, so much BS by Anonymous Coward · · Score: 0

      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.

      Uhm, the RM is a more general and complete model than the network model, which predates the RM. What is the justification for your comment? That's like saying, "make sure you take a math course that teaches positive numbers rather than both positive and negative numbers".

      If you don't understand, here's one reason why: the RM associates entities by arbitrary boolean expressions, while the network model only links them via pointers and lists of pointers.

      Also, pointers tend to result in procedural, navigational queries ("Get the orders. Then for each order, follow the link to get the customer."). Relational queries are algebraic and declarative and therefore can be optimized by the DBMS. ("Get the customers associated with the orders.").

      Amazing that people still hold the torch for these incomplete, ad-hoc data models, even after 30+ years. At least you didn't recommend the hierarchic model (a la XML), which is even less general than the network model! :-)

    3. Re:So many responses, so much BS by Mycroft_514 · · Score: 1

      If you look at the data structures involved, the Relational model is a subset of the Network model. Thus, if you want to work in ALL the industry, you need a knowledge of the network model. It is easier to translate that DOWN to the Relational model than the other way around. And do you know how many IDMS shops are still out there?

      And how do I know this? I've been around long enough that I wrote some DDL translators. (And had them marketed as well, by AT&T and Bachman Information Systems.) The Relational model requires you to duplicate n-1 key columns into the row, when you are n levels deep in the structure.

      And finally, the Network model is more closely related to reality, and is still very closely aligned with ER diagrams, which is how you design a database.

  27. 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.
    1. Re:A Good Foundation... by rolfwind · · Score: 2, Insightful

      You left out a language like Lisp.

      I recommend the free book Common Lisp: A Gentle Guide to Symbolic Computation.

      http://www-cgi.cs.cmu.edu/afs/cs.cmu.edu/user/dst/ www/LispBook/index.html

      After that, Practical Common Lisp by Peter Seibel.

      The reason I recommend lisp is this: I started on C/C++ and those languages were always a pain to program in, I was wrestling them to translate the ideas in my head to the screen. Lisp is pretty easy once learned (easier than most languages I find), especially when you have to learn about Algorithms and Data Structures, a language like lisp is a godsend compared to C or C++ (as lists are a built in type, you can concentrate on the algorith, not the code, mallocing or free correctly, etcetera).

      The same goes for scheme (different dialent still lisp) or dylan (though I prefer prefix notation.)

    2. Re:A Good Foundation... by Watson+Ladd · · Score: 1

      For OO I would use a pure OO like Smalltalk. Add Lisp and Prolog and you have a good list of languages for every possible task. Objective-C is also worth learning if you want to put OO on C. C++ just isn't compatible with C. Objective-C is.

      --
      Inventions have long since reached their limit, and I see no hope for further development.-- Frontinus, 1st cent. AD
    3. Re:A Good Foundation... by canadian_right · · Score: 1
      That is a good list of languages to learn, but just as important are some underlying theory that good programmers should know.

      Some key theory that I found useful in real life programming:

      • Data Structures
        • arrays
        • lists
        • heaps
        • hashs
        • trees
      • Algorithms
        • Searching
        • sorting
      • Relational Databases (should know what a hierarchical DB is too)

      Depending on the field you go into math may be important:

      • trig
      • coordinate systems (cartesian, polar)
      • discrete math
      • linear algrebra

      Once you get the syntax of a couple of languages under your belt you will find it isn't that hard to pick up new languages. It more important to know how to apply those languages using math and CS skills to the problem at hand.

      Also learn at least a little about the hardware - just enough to know why some code runs so much faster than other code for some problems.

      --
      Anarchists never rule
  28. It doesn't matter by cubicledrone · · Score: 0

    1. No matter what you know you can't find a job anyway
    2. If you can find a job, you can't keep it.
    3. If you can keep it, it doesn't pay enough.
    4. If it pays enough, it's miserable work and your boss is a rat fuck liar cheat blow-dried phone-flipping asscrack.

    Business has turned its back on its neighbors. They are interested in nothing except your money. You could have three PhDs in Computer Science and they'd still find a reason to disqualify you from any job.

    They aren't happy with their share. They want your share and the other guy's share too, and they'll fuck over everything and everyone else to get it.

    Cue Slashdot apologists for the Neo-Darwinist "screw everyone else" Faux-Capitalist game show economy.

    --
    Business isn't willing to pay for products, innovation and careers, so we get brands, mortgage commercials and layoffs.
    1. Re:It doesn't matter by cookiej · · Score: 1

      "It looks like someone has a bad case of the Mondays...!"

      Seriously -- you should write childrens' books.

    2. Re:It doesn't matter by Anonymous Coward · · Score: 0
      Business has turned its back on its neighbors. They are interested in nothing except your money. You could have three PhDs in Computer Science and they'd still find a reason to disqualify you from any job.

      They aren't happy with their share. They want your share and the other guy's share too, and they'll fuck over everything and everyone else to get it.

      Cue Slashdot apologists for the Neo-Darwinist "screw everyone else" Faux-Capitalist game show economy.


      No apologies here, but I think you're a bit extreme.

      Faux-Capitalist game show economy


      This is so dead-on it's not funny.

      Anyway...

      My sugggestion: get a BS in Nursing or go pull an apprenticeship in plumbing. If you have a small penis and/or like to beat people's ass semi-legally go into law enforcement.
    3. Re:It doesn't matter by Anonymous Coward · · Score: 0

      I agree, dont walk but run from IT... All the jobs are in India. I should have got out of this 20years ago.

    4. Re:It doesn't matter by Irish_Samurai · · Score: 0, Offtopic

      My sugggestion: get a BS in Nursing

      Actually, an even easier and more profitable path would be to get an education as a pharmacy tech. Pharmacist techs make more and are in an equal demand to nurses.

    5. Re:It doesn't matter by Anonymous Coward · · Score: 0

      Or you could become a motivational speaker like this guy.

    6. Re:It doesn't matter by pete6677 · · Score: 0, Troll

      Its been said before but I'll state the obvious again just for emphasis: YOU are the single greatest reason why your career hasn't worked out very well. Who do you think would hire you if you come into the interview thinking they are a "rat fuck liar cheat blow-dried phone-flipping asscrack"? Let me give you a hint: that attitude shows during an interview.

    7. Re:It doesn't matter by cubicledrone · · Score: 1

      YOU are the single greatest reason why your career hasn't worked out very well.

      Nothing at all wrong with my career. By the way, thanks for making my point.

      Who do you think would hire you?

      Someone competent, which disqualifies about 99% of middle management. Oh sure, the average hairpiece wants someone to crawl into an interview and crumple their hat in their hands as they beg for a job finishing every sentence with "sir." They'd love nothing better than for that person to take a salary half what their worth and dig trenches with their bare hands with no benefits all the while thankful they were granted the "opportunity."

      I can do the work of any ten middle managers. And that is the "single greatest reason" there are no opportunities in the modern cubicle farm. I shed a single tear every Monday morning. Then I go back to work.

      --
      Business isn't willing to pay for products, innovation and careers, so we get brands, mortgage commercials and layoffs.
    8. Re:It doesn't matter by cubicledrone · · Score: 1

      Fastest way to become unmotivated is to take a job working for some crouton-ordering carpeted-walls chair-molded asscrack. What, you actually think being motivated is an advantage in the modern workplace?? That's the fastest off-ramp from the employment highway next to competence.

      --
      Business isn't willing to pay for products, innovation and careers, so we get brands, mortgage commercials and layoffs.
    9. Re:It doesn't matter by Anonymous Coward · · Score: 0

      Shame that the republicans are looking at effectively abolishing immigration quotas for nurses and other medical support personnel. The people who are packing the nursing schools here and the people building new schools because the existing ones just can't graduate nurses fast enough are in for a rude surprise.

      I suppose America's current abysmal place in quality of medical care (Cuba has lower infant mortality rates) will benefit from this brain drain. As Bush says, "If you can't beat them, claw and drag them down to your level."

  29. Python by SQL+Error · · Score: 2, Insightful

    Learn Python. Seriously.

    1. Re:Python by newt0311 · · Score: 0

      Amen to that. Especially with the intrepretter, learning this language is a breaze.

    2. Re:Python by rgravina · · Score: 1

      Yes, that is great advice. I wish I could get back all the years I wasted on PHP.

  30. My List by Tablizer · · Score: 1

    Here is my list of "musts":

    * HTML
    * Java
    * Php
    * SQL and relational theory
    * JavaScript
    * Lisp (not used much in practice, but has interesting concepts)

    Note that this is not necessarily an endorsement of these languages, only a practical suggestion.

  31. Don't Worry About It, It'll Change by kidventus · · Score: 1
    My best advice is: Stop worrying about the tress. They change. Focus on the forest

    You've named a lot of high-level and low level technologies together (i.e. Visual Basic, AJAX). What you need to do is learn the basics, a good language to start with is Java, as well as read design patterns, OO design, algorithms, ect.

    The technologies you just named today will seem very old on your resume just two years from now. You'll find that once you pick a field, your list of things to learn will be very different.

    Java Enterprise? EJB, IoC, SDO, Ant, Spring, Hibernate, REST, ect.
    Microsoft? C#, ADO.Net, WinForms, Avalon, ect.
    Web: AJAX, JavaScript, CSS, XHTML, PHP, ect.

    You need to worry about all the trees after you pick what forest appeals to you.

    Finally, Avoid tech ego; do your best; Always think in concepts, not code; always think of the use case; never forget they count on you to tell them what is best, like you count on a doctor. That's a real responsibility. Lives have been ruined and millions wasted because people didn't think they had the responsibility in IT they do.

    --
    There is a rage in me to defy the order of the stars, despite their pretty patterns.
    1. Re:Don't Worry About It, It'll Change by Irish_Samurai · · Score: 1

      Nicely put.

      You HAVE to choose an area of interest. Also, learn the business environment that your interest rests in. If you are going to be skilled AND revenue generating in an area of expertise this is a must. Once you understand the underlying concepts of a field and its diciplines - you will need to be vigilant on where they are going in order to apply your knowledge to maintain your revenue. If you can maintain your revenue in this manner, it effectively co-opts business to fund your learning.

      Finally, Avoid tech ego; do your best

      I would like to add to this with my own philosophy. If you run into tech ego - try to cater to it initially. There are those that will tell you that you suck, that you are a newb, and that you have no business doing what you are doing. These people tend to have some piece of knowledge you can garner from them. Explain what you are trying to do and they will undoubtably explain how you should do it and why.

      THEN GO HOME, DO IT THEIR WAY, AND TRY TO BREAK IT.

      These types will always give up the "inside info" so they can look smarter than you. Take it and run with it - you should be in this for the knowledge, not the noteriety. Their hubris will give you a great bit of information to build your skills on.

      never forget they count on you to tell them what is best, like you count on a doctor. That's a real responsibility.

      I wish more people understood this instead of assuming it.

  32. Start not; do or do not. Powertools kick butt too by Solitonjoy · · Score: 1

    So then, it certainly helps to have a well-maintained copy of tcsh around along with bash and vim; you kind of learn a bit of those, then you either have ideas for some cool ways for things to be and work to make them happen, or you run out of interest and maybe eke out a living repairing XBox remotes and renewing catalysts, I dunno.
            The thing is, if you are going to plot out the things you think you can learn and do, go ahead and map them together so that even if you end up rerouted, your stuff gets done and interests served. If instead you plot things out that you develop a hairy kolgomorov plot of what you may have been interested in, you are becoming some kind of tortured historian rather than an Electrical or Mechanical Engineer or Computista or Web Linguist.
              Mathematica running in the background, use of User Mode Linux, a certain caprice with the pinout of your PS2, genuine distaste for having the same book loaf around more than a week, and a rabid pursuit of the journals and apocrypha particular to your interests might help.

              You may need to leave periodic reminders to use a tennis racket (juggle a ball while running, etc.) and some hippie kryptonite.
              Once you know how it works, you can always repurpose things attached to your body like EKGs, BVO2Ms, etc.

  33. Not the best advice...but a good starting point... by masdog · · Score: 2, Insightful

    First, it doesn't pay to learn programming languages. Programming languages change or are replaced by the next new thing. Who knows what programmers will using in 5-10 years.

    If you want to program, learn how to write algorithms. Once you learn how to write algorithms, you can write in any programming language, even if you have never been trained in it.

    That was the first thing I learned in the programming section of my IT degree. We didn't touch a programming environment until halfway through the semester, and by that point, we could write the algorithm for a PB&J sandwich in pseudocode.

    When you can write algorithms, you can become language portable. If you have a job that requires C#, you can use a desk reference and the help system to implement your code. If your next job requires Delphi, you won't need to completely retrain yourself.

    Finally, give yourself projects. I learned how to develop databases by giving myself personal projects in that field, taking advantage of the MSDNAA to get SQL Server 2000 and Microsoft Access. With a simple SQL refresher, I would feel comfortable sitting down and hand coding a simple DB in Oracle, DB2, or MSSQL (not taking into account differences in each SQL implementation).

  34. 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.

  35. Knuth's Literate Programming. by sidles · · Score: 1

    Before all else, learn Literature Programming, in the style invented by Don Knuth.

    We use nuweb---it works with any language.

    1. Re:Knuth's Literate Programming. by Aladrin · · Score: 1

      Eh... That site is pretty messy. I'm not even sure they proofed what they wrote.

      CWEB is a combination of C++, TeX, and CWEB.

      Oooh, it's recursive.

      The FAQ is hidden under articles and is a PDF. WTF? I can't even find out what it IS without starting loading up a freaking PDF? C'mon. No serious programmer stores ANYTHING they might have to actually look at in PDF if they can possibly help it.

      I admit the idea of a programming language with built-in documentation and the idea of programming as 'do what the user wants with the computer' instead of 'tell the computer what to do' is a neat idea, but I'm worried that the authors of 'Literate Programming' can't make a good website for it. Or even the fans. Anybody!

      --
      "If you make people think they're thinking, they'll love you; But if you really make them think, they'll hate you." - DM
    2. Re:Knuth's Literate Programming. by sidles · · Score: 1
      Oooh, it's recursive: Of course it is! CWEB's source code (and also, the source code for Knuth's famous TeX program) is of course documented in (what else?) CWEB. This same is true of the much-simpler NUWEB system that our QSE Group uses.

      Knuth's celebrated essay Literate Programming is available here. Also, Knuth has written an entire book on this subject whose complete text is available here.

  36. Assembly Language by kmsigel · · Score: 1

    Seriously, learn some assembly. Read the handbook. (Intel IA-32 Software Development Manual or equivalent for other processors.) There is no substitute for knowing what the processor is actually capable of doing. Then you can appreciate what a high level language is doing (and not doing) for you. Look at the assembly that the compiler produces. This is all fun stuff. Enjoy it. (If it isn't fun, move on to some other profession.)

    Then you can move up to C, C++, whatever. Just realize that there is nothing magical about high level languages. The processor can still only do what you read about in the handbook. Personally, I've never gotten past using Assembly, C, and C++. I've never had any use for any other languages. None of them do anything fundamentally different from what I use.

    This may not be the right path for you, but it has worked very well for me.

  37. Lots of different paths are available! by ErichTheRed · · Score: 1

    Good point you're making...it really is much harder for a total newbie to get a solid start from zero knowledge these days. I think it's partially due to the fact that so much of the earlier computing era is hidden behind well-crafted user interfaces designed to keep you out of trouble.

    I'm really dating myself here, but my first exposure to computers was with an inexpensive Commodore home machine that shipped with manuals detailing the entire memory map of the system. With 4K of RAM and all the specs published, it would be very easy to write your own software, which was probably the point. Fast forward to today, and you get way too much to deal with when you get a computer. It used to be really simple to create a "Hello world" or even something more complex in BASIC or some other language. Now, at least on the Windows side, you have a development environment that, to me, is very hard to get going with in anything but Visual Basic. The document object model for web development makes sense to me, but Windows forms programming seems like way too much effort to learn. Besides, grunt coding work is all going to be overseas soon anyway...

    Since computing is so pervasive now, you really have to pick a branch to learn more about and do as much hands-on research as you can. As an IT professional (sysadmin, non-developer type,) I could never possibly keep my focus on every single new system, new trend, etc. There's just too much information to digest and still have a life.

    The way I always pick up something new is find a neat project online, or start from the perspective of solving an existing problem I have. It's a fun, challenging and often really frustrating way to learn stuff. THe fun thing is going back after a few years and shaking your head about the crazy, inelegant way you learned Technology X.

    One other important thing...in the computing / IT world, you're always learning. Even if you end up doing the same type of thing, the way you do that type of thing can and does change overnight. Just ask anyone who's worked in corporate IT from the mainframe era to the PC era to the client/server era and now back to the mainframe-style centralized computing era. If constant change is what you're looking for, welcome!!

    Good luck!

  38. Focus by Anonymous Coward · · Score: 0

    I'm not sure about the rhetoric in your question - I wouldn't write off Javascript and SQL as "basic."

    It seems to me you should focus on learning how to program - languages and other "technologies" will fall into place reasonably quickly after that. Try Python, or Ruby - they're nice languages, with good documentation and strong communities. Avoid C++ for now.

    Further, focus your interest - what aspect of working with computers excites you the most? Even if you reply "everything," select something and pursue it so that you have a framework for learning.

    And for some perspective - I'm an applications programmer, mostly Objective-C, and I couldn't tell you the first thing about AJAX or Perl or a host of other acronyms. In other words, not knowing "all the different technologies" hasn't hurt me yet, AFAICT.

    Best of luck.

  39. If you are interested in web applications by jjn1056 · · Score: 1

    feel free to drop me a line at my email. I'm working on a large project using perl and Catalyst (Catalyst is similar to RubyOnAlls). If you are interested in those technologies I can give you a place to start.

    The IT field is huge. You need to find your own way around it. You might like client side development using Javascript and AJAX, or you might prefer to work in the database with languages like PLSQL (Oracle). I always found I learned the most by taking on a tough project and working at it until I made it work. Your results might vary.

    --
    Peace, or Not?
  40. IT (and programming) does not happen in a vacuum by ScentCone · · Score: 2, Insightful

    Yes, you need to learn actual, practical things about the operating systems, DBs, and languages you'll be trading on. But the thing that too many would-be IT people seem to miss is that very few IT careers thrive without some context in the wider world. The programmers, even the server jockeys, that bring some "vertical" awareness to what they're doing, are way more valuable, and their employers are more willing to look past the lack of some particular new skill (and pay to have you go learn it).

    Why? Because experience and an interest in what the organization is actually doing (and which the IT people are there to support) is harder to come by than someone who can remember some bit of API syntax or or write a select statement with a 5-way join right on the first try. Be well rounded in IT, sure, but also take time to understand where money comes from. Why projects fail. How Sarbanes-Oxley impacts database backups. What HIPAA is.

    If you're going to expect an IT paycheck, get hip to what it is that generates the demand for what IT does, and what it means to be worth the money. That sounds rather vague, but if you follow the other advice you're seeing here (about how to get acquainted with various languages, coding structures, etc) you're only partway into a successful scenario. You'll be far more likely to be paid to learn the interesting new things that come along if the organization you're working for sees that you're interested in the bigger picture.

    --
    Don't disappoint your bird dog. Go to the range.
  41. 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."

    1. Re:Errata by dodobh · · Score: 1

      That is perfectly all right. I have Hindi speaking peers, and I can communicate perfectly well with them.

      --
      I can throw myself at the ground, and miss.
  42. 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 :)

    1. Re:Mainframes by Anonymous Coward · · Score: 1, Insightful

      As someone who was trapped in mainframe hell for over a decade before managing to dig an escape tunnel into the modern world, can I just say that learning mainframe is the WORST ADVICE EVER...

      The work is well-paid if you're a contractor) and poorly paid if you're not. And it's a terrible place to be. The work is uninspiring, the tools and languages are simultaneously over-complex and under-powered, and worst of all if you try to go someplace else and tell an employer "but i know COBOL! and PL/1! and Job Control Language" then they will laugh you right out of the door. The only way I managed to get out was to spend my own time and money learning C and UNIX and then taking a massive pay cut to go and work on Embedded tools (which is the next worst place to be BTW).

      You want a high-paid job ? Learn Java.
      You want interesting and challenging work ? Learn C++.
      You want an easy life ? Learn Python!

      Sadly, the *best* programming environment ever (Obj-C and Cocoa on OS X) has even less programming positions available than Mainframe. So probably a waste of time, but nice to learn.

    2. Re:Mainframes by id09542 · · Score: 2, Insightful

      I've been a mainframe systems programmer for 20 years now. Definately a "fun" and secure job. We code in Assembler, C, Java, multiple scriping languages, REXX, Perl, run Websphere and the such. I have not touched COBOL for 15 years, nver used PL/I and I am seing a increase of students coming out of college wanting to start back in the Mainframe arena. I am seeing some of the mindset of Mainframes being archaic finally getting past what the Windows/UNIX "trade" rags have been preaching. I concede the fact it is easy for someone to "Play" on a Windows/UNIX machine in their home as most people don't have a Mainframe in their bsmt. Intersting thing I have seen over the last few years, the physical size of the mainframes are now smaller than the Unix/Windows machines and use less environmentals ... funny how that has come around.

  43. Get a well rounded education by Tog+Klim · · Score: 1

    Go to a university with an accredited CS department and get yourself a BS degree. The technology and buzzwords change every few years, but the theory still applies. Learn the theory and then use the tools to apply it. As the tools improve you will still use the theory. If you go learn tools, then when the tool changes in a few years, you will be lacking.

  44. Re:IT (and programming) does not happen in a vacuu by masdog · · Score: 1

    To go along with that line, consider checking into publications like Information Week and Network Computing from CMP. You can swing a free 1 year subscription to them, and it will get you inside what is going on in IT.

  45. You've missed something by 93+Escort+Wagon · · Score: 1

    A lot of times knowing the building blocks (e.g. learning the languages) is easy, as you say. But where a lot of people fall down - and I hate to say it, but it's more often on the *nix end - is understanding what it is you're trying to build. Learning SQL is easy, yes; but understanding how a database should be constructed is not always intuitive. Learning JavaScript, HTML, etc. are easy; but knowing how to present information clearly, or how to put together an interface that'll be easy to use, is harder.

    Once you learn the principles of one language, you can pretty much intuit the others from there. So learn a language or two, but then take a course on database theory or interface design. Figure out what you like, and then focus on that.

    --
    #DeleteChrome
  46. 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.

    1. Re:Look at your local university's curriculum by hendersj · · Score: 1

      I'd second following this sort of path - learning structured programming is like learning the Latin of programming languages. Once you understand structured programming constructs, you can pick up languages fairly easily. A loop is a loop is a loop is a loop; learning how to implement one in C/C++, Pascal, PHP, Perl, BASIC, or any other of the myriad of languages out there is just syntax.

      --
      Insanity is a gradual process; don't rush it.
    2. Re:Look at your local university's curriculum by WinterSolstice · · Score: 1

      I would agree, but amend it like this for database stuff:

      "Basic Programming -> Data Structures -> intermediate topics: " Here I would add RDBMS concepts since a huge chunk of the work developers do is SQL/DB related code. Many developers (frighteningly enough) do not understand basic RDBMS and SQL stuff, leaving it to people like me to explain to them why certain things are very, very bad.

      -WS

      --
      An operating system should be like a light switch... simple, effective, easy to use, and designed for everyone.
  47. 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.

  48. 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.

    1. Re:It isn't about "everything" by dbIII · · Score: 1
      calculus in college. (No cute comments from you overprivilged types who had calculus in 8th grade.)
      How about those at a more normal privilage level that at least had a couple of years of it in high school as part of their states standard curriculum. If you don't touch it until college in the top mathematics stream then there is something seriously wrong with the education system in your state or country.
    2. Re:It isn't about "everything" by fm6 · · Score: 1

      I think I was pretty clear about not wanting to get into "my school is better than yours" flame wars. But I am curious as to which states require their high schools to offer calculus.

    3. Re:It isn't about "everything" by dbIII · · Score: 1
      But I am curious as to which states require their high schools to offer calculus.
      Every state in Australia for a start - but I suspect also in the UK, nearly every country in the former British Commonwealth (ie. big chunks of the third world) and unless things are somewhat backward possibly most states of the USA as well. Out of curiousity which state are you in where it is so backward as to not teach a vital tool required before you even start on a University science education - is it one of those places where they are trying to put Christianity Lite into the biology curriculum?
    4. Re:It isn't about "everything" by fm6 · · Score: 1
      That's funny. I was just listening to a podcast of The Science Show, and one interviewee was wondering how Oz managed to get the scientific rep it has. Obviously its school system plays a role.

      But I, like most Slashdotters, live in the U.S., and here Calculus is only taught at the better high schools. I very much doubt the the U.K. is any better.

    5. Re:It isn't about "everything" by Anonymous Coward · · Score: 0

      In the UK, top stream maths classes study calculus from the age of 14 or 15. Not just top-end schools, that's every state-sponsored comprehensive school. If I remember rightly (this was about 8 years ago now), the GCSE maths exams had some simple calculus questions.

      It doesn't get onto the serious stuff until 16 though, when people have had a chance to drop maths. Anyone know if you can get past papers on the net? I want to have another go and see if I can pass P6 this time!

    6. Re:It isn't about "everything" by dbIII · · Score: 1
      I suppose the lack of calculus in a basic high school education explains the different US University system and as to why people who have worked to teach engineering students there remark on how good the postgrads are but complain bitterly about the first year undergrads. I always thought the US system would have to be a lot better - especially since a lot of US calculus texts are used in Australia and that stuff like the old Martin Gardner column in back copies of Scientific American made maths fun for a lot of students.

      I know that government schools in Nigeria and some or all parts of China and Eastern Europe have calculus in the standard high school curriculum for the top maths stream - there must be a lot of other places too.

      I went to a below average government high school in Australia where calculus was taught badly (calculus by rote!) but without it I would have had to drop out in the first week of University physics and engineering subjects.

  49. Commitment by Galactic+Dominator · · Score: 0

    Many people have the ablility to learn quickly and are interested in wide variety of fields. In my experience, it's better to not think of those abilities as an asset. Interest and ability are a dime a dozen. It's the ones who have commitment and discipline to their respective fields who are truly valuable. Don't *ask* what you should be interested in. Find something you like, integrate yourself in the community, and don't get distracted by philosophical ruminations or side projects.

    --
    brandelf -t FreeBSD /brain
  50. Just start. by SanityInAnarchy · · Score: 1

    You may look at the comments and find yourself worse off... But let's take an example:

    You want to learn AJAX. Ok, learn (X)HTML, CSS, JavaScript, some basic XML (XSLT can help, as you can play with it in the browser), and learn the server-side technologies -- PHP, Perl, Python, Ruby, even C/C++/C#/Java -- Perl might be the fastest to get started with, and learn some SQL programming -- MySQL.

    You don't necessarily have to do all of those for basic AJAX programming, but it helps. You also don't have to go at all in the order I described, but it can help to start with something that gives you immediate results, like HTML, instead of something that'll be abstract and arcane until you combine it with other tech, like MySQL.

    But, the important point is, even if that's too much, if you just pick one of them -- say, HTML -- you're getting somewhere.

    --
    Don't thank God, thank a doctor!
  51. 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.

  52. Specialist or Generalist? Try both. by cwcowell · · Score: 1

    My old college's motto applies well to anyone trying to "learn IT": learn a little about a lot of areas, and a lot within a few areas. That way you can experience what it's like to be both a generalist and a specialist. Decide which approach you like better, and follow that path as a career. Yes, it takes some time to experience both sides of the fence, but if you can afford that time, it will be very well spent. Personally, I'm a generalist who wishes he had become a specialist, but different temperaments lend themselves to different types of careers, and you may discover that you lean the other way.

  53. Re:IT (and programming) does not happen in a vacuu by ErichTheRed · · Score: 1

    If you're going to expect an IT paycheck, get hip to what it is that generates the demand for what IT does, and what it means to be worth the money. That sounds rather vague, but if you follow the other advice you're seeing here (about how to get acquainted with various languages, coding structures, etc) you're only partway into a successful scenario. You'll be far more likely to be paid to learn the interesting new things that come along if the organization you're working for sees that you're interested in the bigger picture.

    Very important, and often overlooked. The way I often summarize this is "They're not really paying you to play with computers all day." You have to be smart on both the technology and the business side of the fence. I see great techies coming into the field I work in (transportation) and get frustrated because they really don't know what goes on behind the ticket counter and how they're connected to it. Consequently, IT departments get a bad reputation because they're just perceived as a necessary evil to keep the business running.

  54. Avoid programming suites. by Mister+Jimm · · Score: 1

    Visual Studios and WYSIWYG-majigs can provide huge conveniences (most of the time) to the experienced developer, and as such you will probably want to learn them someday, but when you're learning a language they will tend to leave you with that "I don't really feel like I get it because too much was done for me" feeling. Try to do all your work using a command line (learn to use GNU's Make or some scripts when commands get long) and a text editor (vi, emacs, notepad++, something that doesn't put too many buttons and graphical "helpers" in your face). I say that mostly as an aside -- I too have the urge to go on for a few paragraphs about the importance of staying problem-oriented and understanding what's really going on backstage, but it's been said and said well. :E

  55. there is an order by moochfish · · Score: 1

    You've just made a huge generalization about what "IT" is. The IT industry has a lot of technical skills involved and is almost impossible to be a master of it all since it evolves so quickly.

    To make a metaphore, it's the same thing as asking people how you could become great at sports. Your goal is to be great at all sports such as baseball to hockey to golf, but you don't know where to start. The most obvious answer is you should start where you are most naturally talented. The other side of the response is that people will tell you if you want to do it for a living, you can't start out trying to master everything. In fact, it's probably a disadvantageous to start off so broad.

    To address another part of your question, while the technologies may seem interrelated, there is definitely NOT a full circle in terms of requirements. For example, a programming language rarely requires a deep understanding of another technology to pick up. And if you want to be safe, start at the basics. Don't start off trying to program in AJAX, which is a mashup of various programming languages and methodologies. First you start with HTML, then you work on learning server-side programming such as perl, python, or php. Then you learn client-side programming (Javascript). Then you learn XML. Finally, you put it together and you are ready to play with AJAX.

    So to sum it up, I'd say you need to really investigate where you want to focus your efforts. A very clear path will emerge if you actually stop to read up on each technology and if it is built upon others (which you would then have to learn first).

  56. Just my .02 by nege · · Score: 1

    I would reccommend to start with NIX. It is the root of all OS and you will find many things along your programming career that will harken back to something relating to NIX. Most application servers run a NIX OS and to program for them and administer them a NIX background will be essential. Basic NIX commands (ls, cd, chmod, chown, su/sudo) coupled with VI should be your starting point. Once you master these try tackling your first programming language - I would reccommend BASH / KSH (shell scripting) or PERL, but pick something somewhat relevant to what you are trying to accomplish and something that looks fun. Also, don't take too much stock in what someone says about learning this or that language versus another. Most of them have very similar constructs anyway. Remember that opinions are like belly-buttons. Everyone has one!!

  57. Republican WAR on IT by B_SharpC · · Score: 0

    REPUBLICAN WAR on IT Republican Party has declared War on IT. Do not walk away, rather run away from IT. Republicans have selectively targeted IT & Computer Science for massive immigration foriegner visas. Proof? Google h1-b visa database. Funny how Medical Doctors are not targeted even though it would lower the high cost of medical care. Nursing industry is also targeted. IT and Nursing have a bulleye from the Rebublican party. Managed markets are not free markets. Run away from IT and do not look back. :)

    --
    Score & Karma: SASA: Slashdot Approval Seekers Anonymous
    1. Re:Republican WAR on IT by Tablizer · · Score: 1

      Amen brotha!

      Businesses and their lobbyists want A+ workers at D wages, and they will invent "shortages" etc. to create the "need" for offshoring and visa workers.

  58. Formal Education by n4088832 · · Score: 2, Insightful

    Get a formal education in software engineering. It doesn't matter how or where you get it, but the fundamental principles you learn will make learning new technologies and languages easy.

  59. Learn a few things, and learn them well by MikeRT · · Score: 1

    --for your age and skill level. Out of college, no one should be offering you a senior level job unless you are getting a CS/SWE/CE degree as a formality after years of experience. It's better to take a "Software Engineer I" (out of V-VII) even if it's a little below your skills.

    If you are expecting to be a super-elite code ninja, forget it. If you can handle the basics, and handle them pretty well, you'll be fine. The big thing is STFU and stop complaining if you're like a lot of Americans with learning something on your own. Nothing says you're not fit to be a software developer or engineer more clearly than complaining about having to teach yourself new things.

    Learn one statically-typed, major language like Java, C#, C++ or C well, then learn a scripting language decently. Get familiarity with build tools beyond bullshit like notepad and manually running the compiler ever compile. You'll be using full-blown IDEs or build scripts. Learn all of the basics about databases and networking that you can.

    1. Re:Learn a few things, and learn them well by An+Onerous+Coward · · Score: 1

      Your comments are mostly good. Your STFU is completely unwarranted.

      I've spent the last seven years doing basically what you describe: learning on my own. CS studies helped a lot, and a few people have provided invaluable help. But it's taken seven years for me to get to the point where I feel like I can master new technologies fairly easily, and step into some coding positions without getting blown completely out of the water.

      While a lot of that time was absolutely necessary, I can look back and see a lot of dreadfully wasted time. Do you know how much more quickly I would have been able to progress if somebody had taken me aside twice a week to hammer home a couple of new concepts?

      Here's a list of concepts I should have been taught in the first two years of the game, rather than the last:

      * Iterators
      * Generators
      * Version control
      * Unit testing
      * Functional testing
      * Refactoring
      * Design Patterns

      Another example I learned way later than I should have: Exceptions and debuggers. How long should an aspiring programmer be allowed to debug his code using nothing but print statements? I'd say two months, tops. But I practiced in solitude, seldom if ever asking anyone for new techniques or new ways of thinking about my craft. To this day, when some bug is vexing me, I have to actively resist the urge to start writing print statements.

      I therefore reject your advice. Yes, the curiosity must be there. Yes, you have to be willing to put in the long, caffeinated hours, often with no wits but your own to rely on. But individualized, free-form instruction can be invaluable in keeping the young'uns on the path of righteousness. I'm not talking about "drag the grad student over to help you hunt down this one bug"; rather, I mean coding sessions of perhaps an hour or two, focused on a specific technology or a few key concepts. Pair programming sessions can also be useful.

      If you're feeling generous, find a few of the up-and-coming, take them under your wing, and give them the best information you can. If you're less generous, at least freely loan out the books you've found most helpful, with a short explanation of their importance. If you're feeling lost, find someone who looks less lost than you and ply them with beer and pizza until they tell you their secrets.

      I don't think it's treat all that wasted, undirected time as some sort of hazing ritual. If you're stuck in an abusive relationship with your compiler, you have to speak out and find help.

      --

      You want the truthiness? You can't handle the truthiness!

  60. What Does Your Job Require? by kjh1 · · Score: 2, Informative

    There is another angle that you can take in looking at this question: what does your job require you to know? Or perhaps, what do you need to know in order to qualify for a particular position?

    I've been in the IT industry for a long time, including as a consultant and I've seen companies of various sizes. I'll never forget one huge financial services firm, which of course had a correspondingly huge IT department (on the order of 1,000 people), had a guy who was in charge of DNS. That's it. This guy probably got paid 6 figures just to manage their DNS. I'm not saying DNS isn't important, but I can't believe it took up 40 hours of work a week. Anyway, that was just an example of one extreme. On the other hand, you could work for a small company that has lots of IT demands like I do, and they need me to know stuff ranging from managing the computers/network/security to the PBX and phone lines.

    So if you're not currently employed in IT, do a little research. Find out what kind of company you'd like to work for, and what they want in an IT guy.

    PS> If you're in England or at least get Channel 4, check out the IT crowd. It's a pretty funny sitcom on life in IT. If not, you can find episodes on the show's website or on YouTube.

  61. structured code by Borealis · · Score: 2, Interesting

    I don't truly believe it matters what you wish to learn first. Pick one and learn it, and all the rest will be easier. Much like learning a spoken language, once you know a few it gets to be easier to learn new ones. The analogy is true even to families of languages. Iterative languages tend to have common features that are distinct from recursive languages. Web based languages tend to ignore whole facets that form the bulk of some other languages.

    The one thing I do believe strongly is that once you learn a few of the programming languages, you take the time to learn structured programming and design. You don't truly realize how important it is until you learn it and then have to go back and try to maintain code written by some guy who taught himself Visual Basic and thinks he's uber programmer because of it.

    Seriously. The code you make after you learn structured programming and design will take about half to a quarter of the effort to maintain. The only problem is that you sort of have to learn to do code in the first place before it'll make any sense.

    --
    Unbreakable toys can be used to break other toys.
  62. Ummm.... go to school? by tynman · · Score: 0
    I find it interesting that nobody seems to have mentioned the idea of going to school to learn how to program. We geeks are a self-taught breed by nature, but there are some things that you simply might never be exposed to if you tackle it all on your own. I just finished my BSCS, and the classes I had were way better than teaching myself.

    You have to ask yourself why you want to learn how to program. Are you going for a career in software engineering, or do you want to write a database to keep track of your grocery list? It's a question of orders of magnitude-- anybody can learn how to cobble together a dog house. With a bit of study, some experience and maybe a mentor or two you can probably learn how to build your own house. But you're going to have to get some education from an external source if you want to architect skyscrapers.

    I just graduated from Neumont University and happen to be very happy with the job I landed right out of school! Could I have learned it all on my own? Possibly, but I seriously doubt it because there were so many things my teachers brought up that I wouldn't have gone into on my own. Plus, to get to the level that I'm at now would have taken way longer than 2 years.

    But again, this doesn't matter if you're just wanting to do a couple of fancy tricks on your home page. Or if you just want to run Linux because you feel it's the cool thing to do. I have absolutely nothing against recreational CS-- that's where I started too. But if you want a real career out of it, take the time and get a real education.

    --
    Darned tropical millipede! What's it doing in our apartment?
  63. Get some hard math by ingo23 · · Score: 1
    You can learn Unix/Linux as a hobby. The hot stuff (e.g. Ajax) will be like COBOL when you will graduate.

    Use your first 2-3 years, while you still have some time, to train your brain. Get a tough course in math. Something like group theory. Seriously. If you can get through it, you can learn PHP or Ajax or whatever will be hot in 4-5 years.

    I am not saying that you should neglect the regular IT curriculum, but you need to learn how to learn new things. Math is pretty good for it.

  64. Re:Programtic structure by SilverJets · · Score: 1

    Absolutely. Learn the theory first. Once you know the theory it can be applied in practically every language out there. The language doesn't (always) matter, the *idea* is what matters.

  65. best way to start... step by step by PostComment() · · Score: 1

    Well, based on your post it looks like you want to build web based applications probably on unix platforms if you are interested in Unix and Perl. Where to start... well yes it is overwhelming, but with a little time and patience you can get there.

    I read the other comments and felt that they did not provide enough information to get you started, or were perhaps to vague or abstract for a person to understand -especially if they are not programmers yet.

    This is what you need to do if you want to be really good at these technologies:

    First of all, you need to understand basic program theory before you can begin. The best way to learn (without having to take discreet math courses and classes on logic) is to learn a contemporary object oriented programming language.

    I personally recommend learning C++. By default, it is very simple but grows in complexity is you start to progress. In addition to this there are many great simple programs to write and algorithms to study as you go along. It is strongly recommended to purchase a thorough in depth book on C++ with small exercises. One book that I am not overly fond of but does do the trick is the Deitel books.

    I prefer C++ over Java (for learning btw) because it is more strict, involves more micromanagement, and clearly indicates and teaches you about memory management and pointers and so forth later on. C++ uses explicit ways about this versus C# and Java has some implied rules. In addition to this, your first tutorial will not all of a sudden force you to define your own class and merely focuses on the basics. C++ also forces you to learn and understand scope issues, referencing, creating dynamic data structures and so forth without using prebuilt containers. (yes, there are prebuilt containers using STL, but once again, this is for tutorial reasons so please don't bash me here) Also try building your own data structures, sort algorithms, graphs, recursion, and hashes as these will help you to understand more advanced container classes later on in your programming career.

    Once you fully understand C++, you can then proceed to higher more easier languages and you will be able to understand and learn them with great ease, since c++ was perhaps the most difficult way (unless you were using assembler or writing your own microcode and working with control stores).

    After learning C++/Java/C# whichever you did choose, I would recommend reading up on relational database theory. This is a very important staple for any new technology that you would pursue and it would be in your best interest not to gaff this topic. Then start writing some sample app using your c++/java/c# skills to interface with some kind of SQL server whether it is mySQL, Oracle, or MS-SQL, it really does not matter for learning purposes. Please, try to stay away from Access when you are learning, this program teaches you bad habits on using relational databases as its wizards help to try to make things easier and ends up screwing you over in the long run. Seriously though, you need to have a very strong understanding of relational database theory, the use of joins, foreign keys, primary keys and what not.

    During that time you have been taking breaks or trying to figure out how to compile code and use IDEs, try working on Unix or Windows and understand the command line and some scripting including shell scripting and the mighty PERL scripting language. (Perl is great btw) For windows, I would still recommend using Perl or VBScript (you can download PERL for windows at activestate.com)

    Why do I recommend Perl? Perl is a very simple easy and powerful text parsing language and can be used for CGI. Also, later on you will have to make a choice between using PHP and ASP/ASP/NET this is largely going to be decided on your OS of choice, but if you choose PHP, you will find that it is very similar to the PERL language.

    After mastering rdbms and your contemporary OOP language, you can either try to learn PHP or ASP/.NET. Be sure to lear

  66. 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.

    1. Re:Why IT? by ADRA · · Score: 2, Interesting

      Maybe there's a reason there are shortages in these fields. I have known dozens of engineers that ended up getting jobs in software development.

      I don't know why they didn't take a job in their field. Maybe the jobs are crap, maybe the pay just isn't worth it. Maybe the engineers are so old and wise that there are too few people graduating who can take up the slack?

      --
      Bye!
    2. Re:Why IT? by JonathanR · · Score: 1

      As a professional Mechanical Engineer, I almost agree. Much of IT is solving real-world problems of other disciplines, thus IT is (sweeping-generalisation-alert) a support function in most organisations (that aren't IT service organisations).

      I think it is possible to be both a 'real world discipline' engineer and an IT proponent.

      You'd be surprised how many non-IT discipline engineers have no clue how to use computers to make their life simpler. Most don't even know how to use (horror!) MS excel to any decent effect, let alone write themselves any C code to do stuff.

      If you become a pure IT specialist, you'll be forever solving other peoples problems and subsequently bitching & moaning about how they have no clue how a computer works.

      The only problem with this is the frustration of having to work with someone elses kludgy spreadsheet hack (and often are not even worth the "hack" nomenclature).

    3. Re:Why IT? by B_SharpC · · Score: 0

      DECLINE of ENGINEERING

      In year 1913, Central socialized banking moved the USA from Freedom to Facism. This brought the destruction of the US currency dollar. Engineering cannot survive and cannot compete under destroyed currency.

      It prospered through 2 world wars because world competition was destroyed. Without more world wars, unlikely in the nuclear age, Engineering and manufacturing currently are outsourced and offshored because the US dollar is trash.

      Due to Federal Reserve corruption of the money supply, many 'Engineers' are now hamburger flippers or real estate or insurance salesmen.

      ENGINEERING is a LIFE of POVERTY

      --
      Score & Karma: SASA: Slashdot Approval Seekers Anonymous
    4. Re:Why IT? by dbIII · · Score: 2, Interesting
      Consider "real" engineering (mechanical, civil, even electrical)
      Good point - you can alway move into IT later when your Masters project simulating something just turns into a computationally expensive random number generator run on a supercomputer.

      Oddly enough a mechanical engineering subject based around optimising models of dynamic systems to run on analogue computers gave a surprisingly good insight on how to write code in a lot of different situations. Also after milling machine G codes the hairiest regular expressions are not paticularly scary.

    5. Re:Why IT? by molarmass192 · · Score: 1

      Engineering and manufacturing currently are outsourced and offshored because the US dollar is trash.

      This is incorrect, the reason it's outsourced is because the US dollar is artificially high. The US dollar is very slowly being replaced by the Euro as the first tier reserve currency. In combo, the US dollar is also the current world petro-currency. If / when the US dollar is replaced by the Euro as the world petro-currency, the US dollar will devalue much further than it's recent weakening and we'll see an end to outsourcing. The kicker is that as a HEAVILY import dependent country, and a country addicted to low interest rates, there's going to be one hell of a lowering of the standard of living to go with it.

      --

      Good people do not need laws to tell them to act responsibly, while bad people will find a way around the laws-Plato
    6. Re:Why IT? by Anonymous Coward · · Score: 0

      Yes. I did this. After being a helldesker, sysadmin with some programming tasks, I went back to college and got a CS bachelor.

      I got a lot of credits based on my resume, so in the end I only had about 1 year of fulltime school, and half an year full time traineeship/thesiswork. (traineeship was not paided, but had a "compensation" that paid the rent).

      One can argue if college is worthwhile it timewise. However only the 1% most disciplined individuals do better, and the problem is that when confronted with the choice, about 70% of the people thinks he falls in that category :-)

      More important than that is that the diploma also has important salary and job-interview advantages. To sum it all up: choose school.

      And if you have the choice:
      - try to do something that is both fulltime, but avoid sitting between 18 years old. ( I did a program orginally meant to allow other engineering bachelors to get an additional CS program). Parttime schooling often has either quality issues or take a long time. And calculate that you have to
      - For financing, getting back to school often has surprising possibilities, specially if you enter educations that are in demand. Drop out/conversion programs. Being a black female with a disability also helps. (seriously I mean. Make use of anything you've got, it is YOUR future on the line (*) )
      - try to make the most of already existing schooling (my four years chemical engineering paid of ftremendously, no math, no science, no foreign languagish, only the CS courses and skip even the initial ones). Shop for it if necessary to get the most freebies, but don't lower your standards too much.
      - Search help from peers.

      I was horribly lucky in retrospect. Having completed a few years on a serious beta study also helped in my, since that gives you credit automatically on a lot of engineering studies.

      (*) I was neither, but in my freshman year I was considered to be a too slow student, and was limited in which 2nd years courses I was allowed to do. Which was a bit odd, since I had Pfeiffer during one of the major examination (I still suspect them they simply didn't have enough lab room. Chemistry, remember)
      This way of judging was later considered unfair and forbidden by the university. I exploited that in my talks with my old faculty, and that made them sign the documents I needed for the credits on my new education way easier.

    7. Re:Why IT? by RPI+Geek · · Score: 2, Interesting

      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.

      I graduated from RPI last year with a dual BS in Mechanical Engineering and Computer Science. As such, I looked into the job market for both of these areas. A number of things drove me towards IT rather than engineering, but the two biggest were money and time. Let me explain.

      Money: I was very lucky because my uncle is a consultant who does IBM Tivoli installs & maintenance. He was willing to teach me Tivoli so that I could do the same. In return, he would bring me along on his contracts whlie I was learning and have me help him with them while taking a cut of my pay for teaching me. His eventual goal was for me to take the certification exams and start getting my own contracts within a year (his timeframe was off by a bit, but things are still progessing).

      Now that you know the backstory... So long as you keep current with Tivoli it's not hard to find jobs that pay >$100/hr. Comparing that to starting Mechanical Engineering salaries, and considering that I don't have a strong preference for either job, it's not a hard choice. I'll admit that I didn't take your shortage of Engineers into account, but the projected salaries for that field just didn't compare for even 5 years down the road and then other factors influenced my decision.

      Time: There's a lot of travelling involved, but I think it's a perk to go see new people and places all over the country (and in other countries if I ever feel like it). After the travelling, it's typically remote work from my home computer on my own timeframe until the contract ends. A 9-5 in a cubicle with a commute and 2 weeks vacation just doesn't compare to that. I can travel, and as long as there's internet access I can work an hour or two each day and get ahead on my work. I can go to the bank and the DMV when it's open without taking time off work, and I can schedule my errands for when there's no traffic. The hardest part is disciplining myself to work, but it's not an insurmountable problem.

      In a few years if I get tired of consulting and there's a huge demand for Engineers as you say, I'll pick up my textbooks to brush up on what I've gotten rusty with and go get an entry-level 9-to-5 with a steady paycheck. In the meanwhile I'll go see the country on the client's dime.

      --

      - "Nobody came out that night, not one was ever seen. But Old Man Stauf is waiting there, crazy sick and mean!"
    8. Re:Why IT? by An+Onerous+Coward · · Score: 1

      I think the main reason is that the "cutting edge" stuff is continuously being pushed further and further up the stack.

      There was a time when everyone who wanted to make a computer do tricks had to know assembly. The era of punchcards. In an earlier era, if you were doing "IT", you were doing hardware design. As in, "We finally got our eight-bit adder working! w00t!"

      These days, how many people are writing newer, better instruction sets? Or compilers, or operating systems? How many of us are working on writing a new programming language? Of those who said yes, how many of you expect it to become widely used? Most programmers don't interact with anything lower down the stack than system calls, and many projects are OS-agnostic with little effort on the programmer's part.

      Even in the application domain, a lot of things can be considered "done enough". Web servers, DNS servers, text editors. Not that there isn't work being done, but it's being done by a small part of the overall industry. Even where there is lots of buzz in the industry, people are more interested in developing with them than developing them. Sad? Maybe. But some level of specialization is critical.

      --

      You want the truthiness? You can't handle the truthiness!

    9. Re:Why IT? by methuselah · · Score: 1

      Now this is an interesting thread. I am a computer hobbyist that went to work in engineering to pay for my vice. This all started about 20 years ago. Some of the previous posts refer to the fact that many engineers are computer literate at just a functional level. This I have found this to be very true. Now, if you want to survive in this realm you must know how to draw. This is a whole new can of worms. However I will say to those that mutter about poverty and such the reason these "engineers" are unemployed is probably because they have no skills. Now I am sure that that sounds like flamebait, but I keep running into cats ten years younger than me that can barely put a line on a drawing. To them it was a class that they had to take in school. To my point engineering presents endless problems, solving them is what they do. So it follows that if you are very technically astute you can whip together solutions to problems and to them it looks like magic. You gain respect quickly you become a goto person very rapidly and your value increases. This is the path that I took. I find it very fulfilling because my days are spent at a vocation, and my passion for computers remains. Every time that I have tried working full time as a computer something or other I find myself hating computers to the point despair. If you are just trying to get rich forget it try selling real estate or something. Getting "rich" is for the select few. I'll use this analogy. An aspiring composer went to Mozart and asked him how to write symphonies. To which Mozart replied "I suggest that you start with minuets". Well that answer did not sit well with the young musician so he retorted "Why would you say that? You were writing symphonies when you were five years old!" Mozart replied, "Yes, but I didn't ask how". Mozart wasn't being a jerk he was trying to explain that his ability just is. He tried to be encouraging but, his encouragement went unappreciated. For either of these two guys it wasn't about money. I get sick of hearing about how rich people are going to get if they learn some magic skill. Trends fade as time goes on the opportunity to make big bucks come and go. Do you enjoy your pursuit? That should be the question. This field is not "easy money". You are always one upgrade away from obsolescence, unless you stay ahead of the curve. This might sound easy to a twenty year old trust me when your forty its not so easy when the wife, kids, and your house all require constant attention. Do not choose this path lightly but, if you do its bunches of fun. As to how looking back at the path I have traveled I have no clue how you would start today staring at an icon laden desktop. I can tell you how it started for me I had a processor, some ram, a keyboard, a television, a floppy drive and a basic interpreter. Oh, and some books, time and an insatiable desire. Your mileage may vary

  67. Re:Discrete Math: Foundation of Computer Science by Korin43 · · Score: 1

    You're giving it too much credit. Every review I saw contained the phrase "worst math book ever".

  68. What's The Best Way To Eat An Elephant? by porkface · · Score: 1

    One bite at a time.

    It's actually a personality "trait" when you often find things too overwhelming to just dive in and start. I have it, and it's something you should talk to a specialist about if you want to save yourself years of difficulty before you learn to overcome it on your own.

    That said, computer technology and programming is truly one of the most complex systems mankind has ever created. Don't feel bad. Just pick a language and start working on Hello World. You don't have to be able to write your own Sockets interface right away.

    1. Re:What's The Best Way To Eat An Elephant? by Tablizer · · Score: 1, Offtopic

      Answer: Stop voting for them :-)

  69. just follow what interests you... by sootman · · Score: 1

    ...and see where it leads. it might lead you to databases, or web apps, or binary apps, who knows. scratch your own itch, as the saying goes. you're right that everything leads to everything else and it's all intermingled. don't worry, just jump in somewhere and learn what you need to as you go.

    --
    Dear Slashdot: next time you want to mess with the site, add a rich-text editor for comments.
  70. 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.

    1. Re:Mathematical Association of America by Anonymous Coward · · Score: 0

      I'd go by the "mediocre" reviews on Amazon before I went by a rating from the Mathematical Association of America. Why? Because the reviews on Amazon are written by "ordinary" people. I doubt there are any "ordinary" people in the association.

      /Someone may be brilliant but that doesn't mean they know how to teach or express their ideas clearly.

    2. Re:Mathematical Association of America by Elfan · · Score: 1

      Actually the Ross and Wright book really is the worst collegiate mathmatics textbook I have ever used.

      But the parent's point about getting a solid foundating in Mathmatics and Language is a good one and will certainly serve you well if you if you are unsure where to start.

      If you have not read it allready I belive you will find Eric Raymond's How to Become a Hacker essay useful.

      Finally, if you are still unsure where to start install one of the more technically included Linux distributions (such as Debian, Gentoo, or Slackware) and set it up to do whatever you find interesting.

      Good Luck!

    3. Re:Mathematical Association of America by Dominic_Mazzoni · · Score: 1

      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.

      I think the truth may be that there is no truly great discrete math textbook out there. This book is simply one of the better ones out of a field of pretty mediocre books.

      At least two of the best math professors I know teach discrete math with no textbook at all; these same professors do use a textbook in almost all of the other courses they teach. I think that says a lot.

    4. Re:Mathematical Association of America by ceoyoyo · · Score: 1

      Hmm... neither of mine used a textbook either. Interesting.

    5. Re:Mathematical Association of America by Akiba · · Score: 1
      The mediocre reviews at Amazon are likely at anomaly.
      Or maybe it's just that many people who don't like discrete mathematics are forced to take a course with this textbook as part of their degree. I can see that leading to a flury of bad reviews.
    6. Re:Mathematical Association of America by sohp · · Score: 1

      A high rating by a society of mathematicians is just that: a measure of how much it appeals to that sector. That by no means implies that the students who are sent forth to purchase a $100+ book and then to try to glean insight into the topic will actually find it useful or even tolerable.

      To be held in high esteem by the elite of the subject does not confer upon the book educational value for the casual or tangential apprentice.

  71. Depends on your learning style by Anonymous Coward · · Score: 0

    Ask yourself this: do you learn better working from the particular to the general, or the other way around? Most of the posts so far have talked either about learning specific languages, or about going to school & getting the big picture first. Both are viable approaches: if you start by learning, say, PHP, you'll quickly find yourself moving into other areas: general Unix stuff, compilers, databases. Eventually you realize your code could be better, and you start learning more theory, maybe even go to school. Or you can do it the other way around: go to school first, get the theory, and then find ways to apply it. Personally I find learning theory in the absence of practical experience to be pretty tedious, but if you don't, it might get you where you want to go more quickly.

    Of course, this is about learning ... if you want a job, the diploma or degree can be pretty helpful. But that's a different discussion.

  72. Learn C by slapout · · Score: 1

    Many will probably disagree with me on this, but I would say one of the first things you should do is learn C. You don't have to learn all the details of it, just enough so that you can look at someone's else's sample code and understand what is going on. There is a lot of sample code out there on the net and a lot of it is in C. (You should at least know what a pointer is and how to use it.)

    In addition, many other languages borrow from C's syntax (prefix operators, for loops, etc). Knowing the syntax will help you pick up the others more easily. Plus there's a C compiler for just about every piece of hardware out there. (Wanna program a GameBoy? Ya do it in C.)

    JoelOnSoftware also has some good articles about what you should learn as well. (Although some people disagree with him.) The forums at his website would be a good place to ask this question too.

    --
    Coder's Stone: The programming language quick ref for iPad
  73. Re:Discrete Math: Foundation of Computer Science by Anonymous Coward · · Score: 0

    Do you teach an auto mechanic mechanical engineering? Or a cook biology?

    Both of these books would be overkill for 99% of IT workers and 95% of programmers. It is this entire mentality that makes modern CS programs in our universities so useless to the industry.

    While every CS graduate can tell me how many cycles an algorithm will take or how to do a proof in prepositional calculus, they can't tell me how to do kernel level debugging, or how to manage a 100,000 line of code project. Programming companies hire CS graduates because they are trainable, not because they are a useful product once they graduate. But CS programs don't have priority in hiring for prospective programmers. In fact, ~50% of the people who have degrees in physics work as programmers. Why? The same reason--they are trainable (and if they have a degree in physics they are probably very smart).

    All of your elegant code means nothing if it takes forever to write it (and it does). When you are on deadline you had better learn the art of the hack. If this means mixing C, Perl, and Visual Basic (gasp!) then you do it! If this means using bloated already written software then you do it. And if you can do all of this while still keeping it clean, organized, and fast, then you are a programming guru. And they don't teach how to do that in school.

  74. I just play around with stuff... by gd23ka · · Score: 1

    I know it sounds corny but when you trying to learn something just do it.
    Right now I am getting into Solaris 10 so what I did today was I debugged
    a nfs problem using Solaris DTRACE (I traced on fbt:nfssvr:rfs4_op_access
    and output the uid/gid in the credentials) and played around some with
    Role Based Access Control. Okay so I do have more than a decade of
    experience in UNIX-like operating systems, but back in the days I was just
    playing around with Ultrix-32 on a VAX.

    I think "playing" around with stuff is the keyword here. Other people cut
    themselves minor to semimajor projects do whatever works for you but by
    all means get physical, get hands on.

    Last login: Sun May 28 05:21:33 2006 from llb014
    gd23ka@conco51:~$ ======== Player 1 Press any key to begin

  75. 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.

    1. Re:Classes help structure learning by Frozen+Void · · Score: 1

      true hackers invent their own solutions.
      education just feeds you the ideas.If you don't know it from the expirience it
      could as easily be forgotten.
      college will not teach you creativity.
      Its one thing people do on their own.
      If wikpedia had a broader range of knowledge,such "unregulated knowledge" would extremely useful resource for independent self-education.

    2. Re:Classes help structure learning by ThousandStars · · Score: 1
      true hackers invent their own solutions.

      "True" hackers -- although I'm not sure what a "true" hackcer is -- are probably distinguished by their curiosity more than anything else. Good schools help channel and focus that curiosity, thus augmenting what the student already brings to the table. Education can't "feed" anyone anything -- it can only point the person in the right direction. It also eliminates redundancy: it's easy to spend enormous amounts of time bashing one's head against problems that have already been solved.

  76. Don't Neglect the Basics by LFS.Morpheus · · Score: 1

    If you want to start with a higher level language like PHP or Ruby, that's fine, but at some point you should go back and learn C/C++ (IMO you can just do C++, but you should do non-OOP C++ first, e.g. no classes). Understanding things like memory management and pointers are key to understanding how your programs work. Truly understanding a high-level language involves knowing partially how that language works under the hood, and the interpreters/run-time environments are almost always written in C.

    The other area which is key is data structures and algorithms - which data structure and which algorithm to use when. These days you almost never have to actually implement the algorithms themselves because they are included in the language libraries, but you should understand how they work and the advantages and disadvantages of each.

    Contrary to what some people have posted, I don't think learning assembly these days is worth your time.

    --
    The space unintentionally left unblank.
  77. Re:Discrete Math: Foundation of Computer Science by Jack9 · · Score: 2, Insightful

    That's pretty much the worst (and really elitist) advice I've seen regarding what to start with in IT!

    If the questioner can't even decide on what technology to learn (not knowing the dependences of AJAX on Javascript on HTML, etc) recommending a Discrete Mathematics book is a complete waste of time. That's telling someone to learn how to drive a car by researching SMELTING. You are assuming they will ever make good use of such high level concepts (as far as American college students are concerned) which is a very small % of the population...even IF they are interested in learning IT.

    --

    Often wrong but never in doubt.
    I am Jack9.
    Everyone knows me.
  78. Re:Discrete Math: Foundation of Computer Science by drfireman · · Score: 2, Insightful

    Those are good subjects to learn. There are also many hundreds of other important subjects to learn, so choose carefully. I disagree that theoreticians write the most elegant, efficient code, but there's no point arguing this point here for the zillionth time. Knowing more is better than knowing less, so in addition to the many other things you will need to learn to write good code (the most important of which is the domain in which the code operates, which usually has nothing to do with computer science), you may as well learn discrete math and automata theory, among a dozen or so other core topics in computer science and numerous important topics outside the field.

    The advice about English is also important (although it probably wasn't a good idea to lead into that point by misusing the word "simplistic"). If you can write a coherent, accurate paragraph on anything remotely complex, then people with money will fund your projects, and not those of the 90% of your colleagues who are borderline illiterate. (This is not specific to computer science.)

  79. Never Underestimate... by Anonymous Coward · · Score: 0

    ...the power of the college experience. Learning to deal with people, learning the basics of language (English, whatever), arts, mathematics, etc. carry you through life. The best programmer in the world is useless unless he/she is able to convey thoughts, work well with people and know where they came from and where they (and everyone else) is going. Don't put TOO much weight in certifications, they are nice, and sometimes necessary for certain employers, but the biggest hiring point is knowledge and a proven track record of other projects.

    One more thing...if I've learned anything about programming, it is to work for yourself whenever possible. If you are good at any one to three languages, there is work out there, and it will find you, specifically when you have the attributes layed out above from the college experience.

  80. 90% of these replies are crap, by michaeltoe · · Score: 0, Flamebait

    including this one.

    1. Re:90% of these replies are crap, by raftpeople · · Score: 0, Offtopic

      I recommend, as your first project, to write a program that will automatically read slashdot postings and determine which ones are crap. We can call this service "Crapoogle."

  81. Re:Discrete Math: Foundation of Computer Science by Jack9 · · Score: 1

    The correct analogy is "suggesting someone learn about smelting, in order to build a car".

    Sorry about that. /corrected

    --

    Often wrong but never in doubt.
    I am Jack9.
    Everyone knows me.
  82. Rebuttal: Google by Anonymous Coward · · Score: 0, Flamebait
    An anonymous moron wrote, " All of your elegant code means nothing if it takes forever to write it (and it does). When you are on deadline you had better learn the art of the hack. "

    The computer-science programs at Carnegie-Mellon University, MIT, and Caltech aggressively teach theory but require their graduates to complete several massive computer-programming projects before receiving a bachelor of science. The moron claiming a dichotomy between theory and practive is just plain wrong.

    Though Google is a viciously anti-American company that prefers H-1B workers, Google did indeed succeed by hiring PhD's from places like MIT. Most of the employees at Google, before the IPO, hailed from such universities. If you are using Google, then you are using computer code that was hacked by a highly-gifted computer scientist skilled in the science of computer science.

    The distance between information technology and computer science is much smaller than the distance between cooking (i.e. cooking food) and biology.

    You dumb moron.

  83. Nursing. by gunfunny · · Score: 1

    Forget about IT kid... I hear all the money today is in nursing.

  84. Seriously by kilodelta · · Score: 1

    Just go for a broad Information Science degree - that'll give you all the foundation you need in order to learn how to program. Luckily I pick up languages easily, to date I've got BASIC, VB, C, C++, COBOL, PHP, and some Python as well as a few dead languages in the mix.

    But the ones I consistently use are VB and PHP. And while you might think SQL is simple - it isn't. It's a very powerful query language. Do a primer in XML too.

  85. Re:Assembly by hackwrench · · Score: 1

    And if you go that route, the place to start is http://masm32.com/

  86. That is very important by jd · · Score: 1
    Experience is 90% of the profession. Theory is 50%. (Yeah, yeah, I know, but I was using a Pentium.)


    Seriously, yes, try things out. Write your own mini programs, get involved in projects, try experiments to see what happens. Not everything has to be long and complicated, either - start by writing a Java applet that produces animation by colour cycling, for example, or a simulator for a very primitive, fictional microprocessor. In fact, pick anything that isn't too trivial, but would actually be interesting for you, and write it.


    For networking, practice with Zebra or Quagga to get a feel for the concepts in network routing, then use something like NS to simulate a network with routers (you can even plug Quagga or Xorp in, I believe) and see what happens when you try things out. You don't need a couple of physical Cisco routers and a dozen boxes to do this, you only have to run a program which shows you what would happen if you did.


    If you want to play with a nameserver, that's even easier. Start by doing a zone transfer. There are some public zones out there, and they will give you a feel for how zones are laid out. Now create a zone of your own. Add a hook in the master file to point to the DNS server you usually use, modify your resolver to use your local DNS server and modify your DHCP client settings to NOT pull the DNS information. Reboot your machine. If you can still resolve IP addresses, you are the proud owner of a fully-functional DNS system.


    When doing any of these, remember that what you are learning is the syntax and the semantics. There may be better ways of laying things out, or logically composing things - that's always going to be true, though, so don't worry about it. Courses are great for learning theory, and theory will tell you about the composition part.


    You MAY hear lecturers talking of people learning "bad habits" when they are self-taught. That can happen, but the only time it is really true is when the person has forgotten how to learn. Forgetting how to learn is the ultimate in bad habits in IT, because things change so quickly. What was true may be false or purple a week later. You just don't know. For that reason, being open to change and understanding that change is a very important part of the field.


    The only absolutes in IT are:


    • No computer derived from the Turing Machine can solve a non-computable problem, no matter how much time it has or how much memory it has.
    • Every computer derived from the Turing Machine can solve every computable problem in some finite amount of time, provided it has sufficient memory.
    • Hard drives are magically aware of when they are filled with un-backed-up data, and will choose this moment to crash.

    --
    It's a small world and it smells funny; I'd buy another if it wasn't for the money; Take back what I paid (SoM)
  87. Don't be a wheelwright by Zadaz · · Score: 1

    And by "wheelwright" I mean someone who's training was made obsolete by technology

    First, pick something else you're interested in and use this as a focus for your studies, because the technologies you mention are almost random. If you don't have a reason for doing what you do other than "this stuff is cool" you're never going to learn anything. Like games? Start making games. Like online communities? Make one of those. Whatever, but you've got to have a direction.

    Next you need to learn more meta-technology than actual technology. Any specifics you learn now will be obsolete soon enough. Learn enough of the generalities (What programming is, how a markup language works, file systems, databases, etc.) How to do that? Well, ironically you need to learn a specific programing language. Pick one. Everyone here has given a million suggestions, but it doesn't matter. But do take a couple college level courses.

    But beyond those courses don't try to get a degree, at least if you have some personal motivation and discipline. Take that money you'd spend on college, get some nice equipment and a cheap apartment and get to work. Figure out which of those acronyms you mentioned are most useful to what you like to do and climb inside.

    Technology is about problem solving (and patent disputes), so start solving problems. Get in there and apply your knowledge to a problem. If you have trouble, learn something new and apply that. Virtually all of my current skills have come from teaching myself something after being presented with a new problem. What Ilearned in University 15 years ago was obsolete even when I was there. (Schools don't have the money to be competitive in technology)

    If you are not willing to learn new things continuously, and are going to complain about your knowledge being obsolete, then IT is a very bad field to get into. If you just want to dick around in technology, find a different career and be an IT hobbyist.

  88. The "right" way... by Regnard · · Score: 1

    ... starts in knowing yourself, in my opinion.

    I think it depends on what you are pssionate about. Would you like to exercise more creativty? Try multimedia/web. Or perhaps you'd be more interested in tweaking machines. Then a track in system/network adinistration is for you.

    There are a good deal of skill assessment tools online (e.g. brainbench) which can guide you what's a good path to take.

    --
    Need a color? Try 100 random colors
  89. As in anything, drill the fundamentals. by Cixel+Sid · · Score: 1

    Michael Jordan gave a famous speech on how he got so good, and simply he said "drill the fundamentals." While other guys were learning all the fancy moves in college, he just drilled the basics of dribbling, passing, etc. and that (the basic mastery) is what allowed to him do so well at the game. This "drill the fundamentals" principle applies anywhere, be it law (studying justice and procdure), economics (understanding incentives and how money works), or IT/computer science. I argue that the fundamentals in IT, the things which are ALWAYS persistent and important no matter what you do, are as follows: 1. Basic code. Familiarize yourself with basic programming concepts. Get an intro to Java or C++ book. If you get down what's in one of these, you'll be able to understand the basic nuts and bolts of 90% of whatever it is you're doing from now on. I've got a guy in my office, he's been cutting code for 30 years and he still hasn't taken the time to learn recursion. For the uninitiated, this means a lot of his code is fundamentally terrible, and about 4 times as long as it needs to be. 2. Hardware concepts. Most IT stuff doesn't require much hardware know-how, but definately understand how it all works. When your software is doing a billion operations a day, fractions of seconds in data transfer rates add up fast. I'd say don't bother yourself with math or physics at this stage. That's like saying you need to understand organic chemical reactions to master rollerblading. Yeah, down the road your diet might matter, and there are a handful of people who specialize in this, but for right now it doesn't. Same with advanced math and phsyics. I'm writing this from off the top of my head, and might not even agree with this tomorrow (except #1. Definately learn basic coding principles). Anyone else have any (better) ideas for IT fundamentals?

    1. Re:As in anything, drill the fundamentals. by usidoesit · · Score: 0

      I agree completely with drilling fundamentals. (the other guy who said chase a golf ball on skates to learn skating is dispensing BS). I would differ in that most application programming you get into stitching things together to get paid (you write code on your own time). So the fundamentals are not to be found in programming languages, but between them. Basically we get paid to implement various transduction phenomena.

  90. Many language paradigms + core topics by Estanislao+Mart�nez · · Score: 1
    1. Have a good look at many programming languages, which should be very different from each other. Most people who've made lists of languages for you above have failed to do so. Here's what I take is a reasonable one: C, Java, Scheme and Common Lisp, Smalltalk or Ruby, Prolog, ML (either Standard ML or O'Caml), Haskell. You don't need to actually become proficient at writing programs in all of these, but you will benefit enormously from learning the basic ideas of each of them, and what kind of problem they tend to excel on.
    2. There's a few topics in computer science that demand an understanding of many, many different things. My favorite example is database systems; an in-depth understanding of databases requires you to understand hardware, data structures, algorithms, time and space complexity, compilers (for the design and implementation of query languages), facility with higher mathematics and logic (in order to understand things like the relational algebra and calculus), software system architecture and design (to understand why we use dedicated database systems), and many, many more things. Another such topic is compilers; another is AI.

      You want to have an understanding of topics like these, and the degree of your understanding thereof is a good measure you can use to gauge your progress. This means that it's good to pick up a couple of textbooks on databases and compilers, to read them through, and to revisit them. Chris Date's database textbook is a good one, and there's others.

  91. Your best place to start... by Greg_D · · Score: 1

    Learn math, specifically, learn the language of math. Then purchase a few books on algorithms and computational theory and data structures and read them. Complete the exercises. Test yourself.

    Then, learn how to plan to code while you actually learn to code. For every developer who has the genius to simply sit down and write fully functional, self documenting code I can show you 50 who would be absolutely lost without properly planning what they're doing and how they're going to get there (and 60% of that bunch will still be lost even afterward). Learn about design patterns and object orientation. Familiarize yourself with these concepts and the concepts they refer to. Then when you've got that down, learn about database design and familiarize yourself with at least SQL, because even the smallest programs nowadays tend to use some sort of database connectivity. When you begin to think in terms of how to solve a problem instead of thinking about the syntax you're going to use to solve it, then you're getting there, and it separates the 5 year burnout from the career developer.

    Quick example: you're a PHP programmer, and your boss wants you to develop a login system for the company website. What information do you need to have?

    Well, is there any existing and perhaps unused functionality in the website architecture that you can use? If not, where's the login info to be stored? How is it to be stored? What database connections do you need? How many people are going to be hitting your site? Do you want to use cookies or sessions or both? Do you want the user to be able to save his password? How do you prevent people who have logged out from viewing content? What if they forget their username? What if they forget their password? Do you want to have multiple levels of administrative access on the website? Do you want to be able to ban ips? If so, do you want to handle it in your code, or do you want to handle it with your OS's firewall? Are you using cookies or sessions or both? Are there best practices you should follow?

    And so on and so forth. Some of them are basic, and some require a bit of thought. Even though I can get that done in my sleep, I will still always document what it is I'm going to do and then give it to my client beforehand for him to review so that we're both on the same page and I can justify my time if needed. I also keep an evergrowing book of documentation with me that contains the issues that I ran across on past projects. If I've encountered it in the past (especially if I'm tackling the same type of project as before), the info is in there. It helps me to ask the right questions to clients and to avoid earlier mistakes.

    When you develop software professionally, you aren't just writing it for yourself. You're writing it to do what your boss or client want it to do, and so that you and your fellow programmers can understand what your intent was with each part you developed, and so that the people who come after you and have to maintain what you wrote can understand it as well.

  92. grunting house-apes by eddeye · · Score: 1

    The best approach to learning information technology is to first learn the foundation of the technology.... Once you have trained your mind on the fundamental theory, you will discover that most information technologies are quite simplistic.

    By your logic, one should begin learning French by studying the history of French linguistics, cataloguing the phonemes/morphemes, and diagramming the inflectional forms. What a wonderful approach, you'll be speaking French in 5-10 years tops. Sure, you could get some language tapes (or just go to France) and pick up conversational French in a few months, but what's the point? Really, if you can't appreciate the intricate tongue movements of a voiced alveolar fricative, you're nothing but a grunting house-ape.

    Once again illustrating the divide between theory and practice.

    --
    Democracy is two wolves and a sheep voting on lunch.
    1. Re:grunting house-apes by tom's+a-cold · · Score: 1
      Once again illustrating the divide between theory and practice.
      Linguistics is a post-hoc analysis of language, so the example of learning French versus French grammar is not an informative one. In programming, the language was designed, not grown (though some might argue with that in some cases-- hard to imagine anyone actually having designed VB for example). And in a deep technical discipline, practice uninformed by theory is just incompetence.

      The prerequisite to doing non-trivial work in IT is to know how to think clearly, with a minimum of clutter. In my case I've found discrete mathematics less immediately useful than understanding of statistics and experimental design. Studied both at graduate level prior to going into software. A lot of annoying design and debugging problems are much more soluble if you can set up meaningful tests. Some people have an aptitude for this and can do it without formal training. Some people can never learn it regardless of how much coursework or self-study they do. But the ability to think abstractly and reason rigorously is essential. Any unforgiving technical or scientific discipline will teach some of this.

      On to IT specifics: I keep running into coders who don't know anything about data structures. This almost inevitably leads to crap code and weird behavior under system load.

      It's useful to understand functional programming concepts. You don't necessarily need to learn LISP to do this. Python or Ruby can give you a taste. I've seen huge amounts of effort devoted to badly reinventing some of the FP wheels. Like knowledge of data structures, understanding FP gives you some powerful tools for getting the job done in a cleaner, more robust way. I'm assuming you already know some procedural programming.

      Learn basic concepts of usability. No point optimizing something on the back end if you later find that the users didn't want or need it in the first place. And the original poster mentioned AJAX. Well, it's nice to have richer interaction on the client, but again, some of the most interesting questions have to do with determining which interactions are the right ones in a given set of circumstances. Any asshole can learn to write code; many do; some even do it well. But without an understanding of the formal systems that underpin IT, you'll never be more than a handyman.

      --
      Get your teeth into a small slice: the cake of liberty
    2. Re:grunting house-apes by sammy+baby · · Score: 1
      Linguistics is a post-hoc analysis of language, so the example of learning French versus French grammar is not an informative one. In programming, the language was designed, not grown (though some might argue with that in some cases-- hard to imagine anyone actually having designed VB for example). And in a deep technical discipline, practice uninformed by theory is just incompetence.

      What does the fact that it's post-hoc have to do with anything? Zoology is a post-hoc study, but nobody argues that it would be useless for, say, a veterinarian.

      The truth is that if the majority of your work is done writing in very high level languages (Lisp, Perl, Ruby, et cetera), then learning discrete math and/or assembler probably just not worth your time, and I say this as a guy who learned both. Basic data structures and algorithms are important, but there's no point in learning more math than you need in order to get a job done, plus the basics of complexity theory so you can figure out when you're chasing a "hard" problem.
    3. Re:grunting house-apes by eddeye · · Score: 1

      Linguistics is a post-hoc analysis of language, so the example of learning French versus French grammar is not an informative one.

      Actually the real problem with the analogy is similar to that: our brain is hard-wired to acquire language. I'm surprised no one picked that up, but it doesn't matter. The point was to illustrate the fallacy of the approach, and for that it works.

      The prerequisite to doing non-trivial work in IT is to know how to think clearly, with a minimum of clutter. ... A lot of annoying design and debugging problems are much more soluble if you can set up meaningful tests. ... the ability to think abstractly and reason rigorously is essential. Any unforgiving technical or scientific discipline will teach some of this.

      I'm with you on all those points. I encourage broad exposure to as many varied languages and programming paradigms as possible to develop a good understanding of ways to solve problems. "When all you have is a hammer, everything looks like a nail". Data structures are essential too.

      Where I part company with the OP (and perhaps you, I can't tell from your post) is over what this 'background knowledge' should include. Discrete mathematics, automata theory, computability, and complexity are absolutely the wrong place to start. There's a reason those are upper division and graduate cs courses: they aren't for beginners. And when space is tight, they're the first on my chopping block. They simply don't help problem solving much at the undergraduate level, and that's what an undergraduate cs education is: problem solving. The general logic skills help, but you can develop those a number of more useful ways.

      Undergraduates (and beginners outside of school) should start with straight programming. Once they have a handle on the basics, they can move on to data structures and algorithms, where they'll encounter big-O notation. That's all the complexity theory a non-academic needs. Nobody programs Turing machines, automata are few and far between. Those things are a waste for a general education, even though I found them somewhat interesting. Their proper place is grad school.

      --
      Democracy is two wolves and a sheep voting on lunch.
    4. Re:grunting house-apes by Chandon+Seldon · · Score: 1

      Three semesters of descrete mathematics is a requirement in the undergrad CS program I'm currently in. Someone must think it's a good idea...

      --
      -- The act of censorship is always worse than whatever is being censored. Always.
    5. Re:grunting house-apes by 1iar_parad0x · · Score: 1

      Do you just want to speak French or become the next great French author? While it may be a waste of time to study linguistics, a study of French grammar would not be a waste. The real question is how much of academic study (even if done in a hacker-friendly sort of way) is worthwhile? Do you think John Carmack ever picked up a book on Numerical Analysis or Linear Algebra? I'm guessing he did. See, when you go the self-taught route to gurudom you've got to pick up all the industrial skills and some of the relevant theory. Certainly, the key is that the original poster enjoys whatever he does.

      --
      What do you mean my sig is repetitive? What do you mean my sig is repetitive? What do you mean....
  93. SICP by tonigonenstein · · Score: 0

    Start with the one and only: "structure and interpretation of computer programs" (http://mitpress.mit.edu/sicp/).

    --
    The sooner you fall behind, the more time you have to catch up.
  94. More suggestions by ninejaguar · · Score: 4, Informative
    1. Re:More suggestions by idfubar · · Score: 0

      I take it you got a CS degree at either MIT or UC Berkeley? SICP is the canonical text at both schools...

      --

      Rishi Chopra
      www.rishichopra.org
    2. Re:More suggestions by ninejaguar · · Score: 1
      No, never did get a degree in MIT or anywhere else. Never had the money or the means. I'm an autodidact. I might get a degree when I retire. Always wanted one.

      = 9J =

    3. Re:More suggestions by Anonymous Coward · · Score: 0

      So 12 of your 14 recommended texts on CS/IT are either about Lisp or JavaScript (or use Scheme, a Lisp variant, exclusively), and the 13th is about Ruby?

      Gee.... there's a whole wide world out there, you know.

    4. Re:More suggestions by ninejaguar · · Score: 1
      I know. The Scheme books were offered as good introductions to software engineering in general, no matter what language you decided to use in work or play. The JavaScript links were to show that you could implement what you learned in Lisp with a standard language used in business and play.

      But, as other Algol-variant programming languages begin to get Lisp-y (C# is slated to get Closures, after which Sun will probably end up re-introducing it into Java), I think it would be better to know in advance what others will have to catch up on ;-)

      = 9J =

    5. Re:More suggestions by Anonymous Coward · · Score: 0

      C# has closures already, though the syntax is somewhat untidy. I think you mean it's getting lambda expressions (which will provide a tidier syntax for making closures).

    6. Re:More suggestions by Anonymous Coward · · Score: 0
      No, never did get a degree in MIT or anywhere else. Never had the money or the means. I'm an autodidact.

      I really should take this opportunity to recommend a book everyone can use - Teach Yourself Autodidactics!

    7. Re:More suggestions by ninejaguar · · Score: 1
      Looks interesting! Thanks for sharing.

      = 9J =

  95. Depends on what you want to do by songbo · · Score: 1

    If you want to program for web, learn about HTML, PHP, CGI scripting, etc. If you want to write applications, learn a procedural language C, C++, even Pascal, and read up on how the hardware works (e.g. what is a register, how pointers work, etc.). There is no best way. But take the time to learn some of the fundamentals. Data structures, common algorithms, etc. Even if you don't end up using most of them, they'll help you structure your thinking. And ultimately, the choice or programming languages or programming model does not matter. It's how you think of the problem, and how you go about solving it.

    --
    There are 10 kinds of people in the world - those that know binary, and those that don't.
  96. Career or Job? by cchin1906 · · Score: 1
    My opinion formed from fourteen plus years of IT consulting is this: You learn software engineering skills for your career, and software technologies for a specific job.

    You are right; the list of available technologies is daunting. Worse yet, the list are continually changing. If you concentrate on a specific technology, when that technology falls out of favor what skills can you carry forward? Also consider your career ten years from now. Assume the current rage is a technology which has only been available for 1-2 years. Ask yourself why an employer should hire you at a higher rate than a recent grad with the same amount of experience in the specific technology.

    Some examples of engineering skills to start with are object oriented design, design patterns, data structures, design methodologies. There are some other good suggestions in other replies here.

    You can choose areas of interest in which to specialize, but the specific technologies you are going to use in professional life are going to be determined by a variety of factors including best fit, employer constraints, technologies favored by your co-workers or senior developer/designers etc.

    Finally, if I am looking for people to add to my team, I'm going to choose someone with good engineering skills and programming habits over someone who may have more experience with a technology but poor engineering skills. IMHO engineering skills are fundamental and technologies are incidental to an IT professional.

  97. not IT by l3v1 · · Score: 1

    First you could start by learning the differences between learning languages, libraries, coding techniques and Information Technology knowledge.

    --
    I am putting myself to the fullest possible use, which is all I can think that any conscious entity can ever hope to do.
  98. Easy... by tonigonenstein · · Score: 1

    Easy. Start with calculus, then electricity, digital systems, turing machines, register machines, read the verilog source of a processor, digest the whole IA32 manual, then the Knuths (with all the exercices) then continue with C, compiler construction, OS design, UNIX, practice procedural/oo/data-flow/logic/functional/message passing programming with an assortement of C++/ML/Prolog/LISP/, read a lot of source, read introductory material on databases, computer graphics, networking, GUI design, etc..., skim through RFCs, read the whole o'reilly catalog, and... that's it !

    --
    The sooner you fall behind, the more time you have to catch up.
  99. Above all else... by charlesbakerharris · · Score: 0

    Make sure that you do *not* rely on Ask Slashdot for information.

  100. Re:BSCS in the U.S. hahahahhahaha by Anonymous Coward · · Score: 0

    maybe if you had any clue how to pitch your resume (great, skills and languages- what does that mean to HR people?) you wouldn't be bitching so hard.

    and you seriously didn't use a computer before 2001? that's just like... weird.

    and that website, man? don't show anyone that, ever again.

  101. Unions Re:Apprentices by hackwrench · · Score: 1

    Unions have apprentices. My mom was an apprentice in the Carpenter's Union for a little while.

  102. Really learn the basic stuff by osoese · · Score: 1

    "Things like HTML, Javascript, and SQL are like English, but then again, they're basic."

    Not to give you a hard time, but don't write these off because they are perceived to be simple. There are many, many hours that should be dedicated to learning how to use all of these 'basic' skills properly. If you want to be good at coding, the best way to differentiate yourself from others is write good code. That means knowing which javascript works across browsers, safe and efficient ways to write the same SQL (or even better stored procs, triggers and functions), and proper CSS used with HTML.

    And, if your into web-based technologies like those, it wouldnt hurt to check into some XML with XSL Transformations (XSLT).

    But if its just the basics, I would also revert back to C and C++ like others have recommended.

    Java is pretty neat also, and may or may not be easier then C for you. It was not for me, but I was taught C first.

  103. Best Advice by Jerim · · Score: 1

    From your question, I take it that you want to specialize in programming rather than networking or any other areas of IT. (IT is such a generic term that literally encompasses hundreds of actually professions.)

    As a student programmer, I can say that what you want to learn are concepts. Every language shares some basic characteristics with all other languages. Loops, output, input, classes, etc. Once you learn the concepts, you can pick up most languages very quickly.

    Don't get locked into learning a language or two. I often laugh at jobs where they want a specific set of programming knowledge. To me it is like asking for someone who can use Outlook Express, when what you really want is someone who is familiar with email. Sure I know Outlook, but I can guarantee you that I can learn any email client an employer will use. Simpley because there are certain email concepts that are common to all clients. Stating that you know C++ will get you characterized as just a C++ programming. You want to be known as an overall programmer.

    So where do you learn the concepts? There are many beginner books at the local book store or on Amazon. I went to school to learn, and it works for me, but I probably haven't learned anything that I couldn't have learned from a book on my own. I just wasn't a structured individual who had the self discipline to learn on my own. I needed a school environment to get me started. If you chose to go to school to learn, don't worry about the source. As long as the school is regionally accreditated, you are getting a respectable eduction.

    But as with any education, don't think a degree alone will be your meal ticket. Schools are great for getting you started and giving you the leg up. You will continue to learn new languages and techniques long after you have a degree. It is by your over all knoweldge that you will judged. Likewise, if you chose some technical school with a less than stellar reputation, don't worry. Again, your knowledge is all that will matter.

    I would avoid doing any work for outside parties, at first. Your reputation is the strongest thing you will have going for you. If you try to jump into commercial work too soon, you will get a bad reputation because you don't know enough. So even if you learn more in the future, you will still have the stigma of the person who didn't know how to access the SQL server from C++. Wait until you feel like you have studied enough. I personally measure my progress against other students who have done commercial work, to determine at what point a company might find me valuable.

    Learn graphical programming as soon as possible. The basics of every language doesn't include GUI work. Sure you will learn to make text programs, but no one will be impressed with that. After you have a good grasp of classes, I would specifically seek out books and material on graphical programming. Graphics aren't just for games. You need a GUI for any program you make, in order to be taken seriously. Basic programming itself doesn't include anything more than text based processes.

    Lastly, just have fun with it. If you love programming and learn fun things, you will keep going.

  104. Re:Discrete Math: Foundation of Computer Science by Anonymous Coward · · Score: 0

    "That's telling someone to learn how to drive a car by researching SMELTING."

    I see it more more like telling someone that they should know the basics of physics before learning how to drive.

  105. Where to Start by tonicxt · · Score: 0

    As for which technology to start off with - that is a stupid question - I will explain why.

    I recommend starting your education with IT at a prestigious university. Stay away from community colleges and the like--go for a Computer Science degree.

    There are two facets to learning about learning IT: learning the technology, and obtaining a job. Getting a prestigious degree will open doors; getting a community college diploma will not -- this I speak from experience.

    As for which technology--learn the basics first. As you advance, and learn the fundamentals of programming language, you will realize that learning the technologies is irrelevant. Once you have a firm grasp upon the foundations, the programming languages themselves are easy to grasp; there are merely a set of syntax of existing language paradigms.

    Back to the community college aspect. Atleast in Canada, if you get a technology degree from a community college, prepare to be unemployed. Community colleges IMO are shit; they offer a lot of bullshit diplomas in a lot of bullshit. Prestigious universities on the other hand are of a higher nature and will open doors for you. Since I've been in a prestigious university (I attended after community college), I've had work doing bleeding edge work in Bioinformatics and Geographic Information Technology; however, had I simply stuck with my community college diploma, I'd still be washing dishes in a restaurant.

    As for where to start - you have to start at the bottom and work your way up the education latter. There is much more than simply learning a technology; any monkey can do that. It's the software engineering practice/principles and experience that are valuable.

    As for Slashdot--a lot of denizens here are anti-social nerds (people who excel in technology, but have otherwise failed in all other aspects in life), so take their advice (including mine) with a grain of salt (or less.

  106. Device and conquer the principles. by O2dude · · Score: 1

    My advice would be to go from UNIX adminning to full blown programming.

    STEP 0. Learn basic UNIX sys-adminning by installing a Linux distribution and then studying how it goes from boot to login prompt.

    I suggest you use Arch Linux. Along the way you'll learn about: reading on-line documentation using 'man', basic TCP/IP networking, basic user administration, directory structures and file systems, running basic service daemons like ssh, apache and ftp, basic computer security and basic text editing (use pico/nano instead of vi).

    DO NOT INSTALL A GUI/Desktop Environment like X11, GNOME or KDE yet. This will help you focus on the adminning of the core OS and give you an understanding of how GUI's are seperate entities from Operating Systems.

    then...

    STEP 1. Learn the basic concepts of 'structured programming'. Important to realise that these are _principles_ - they aren;t tied to a language per se.

    At the minimum, you need to learn about: 1. control structures like if/then and while, and 2. the basic data-structures like variables and arrays. I'd suggest you use C and the BASH shell to learn this.

    Using C well that's a no brainer. It's the language of UNIX and it's still a very good language to know. I suggest you get Kernighan and Richie's classic book on C. You can also pick up one of Wirths books on PASCAL or Modula 2. Not sexy languages, but particularly Modula 2 has the structured programming stuff very well implemented.

    Caveat on C: Working wih text is going to be a pain till you move on to something more suited for humans - like Python or Ruby - but you need to understand structured programming first.

    Tip when learning C: spend some time with Structures. The concept will help you better understand Object Oriented Programming when you get to it. If you're interested in actual computer hardware and architecture, then probe a little deeper into memory management using Pointers.

    Using the BASH shell will help you appreciate that 1. not all programming is elegant and 2. that the basic principles are found in many different forms. As a bonus it will 3. tie-in nicely with the adminning you've done in step 0.

    then...

    STEP 2. Install basic X11 and a windowmanager. DO NOT INSTALL a Desktop Environment like GNOME or KDE yet.

    Follow the start-up of the X11 system through its configuration files. Use X11 over a network running a program on one machine and displaying it on another. choose a window manager you like and configure it.

    All of this will help you understand the layered nature of modern computer systems. And choosing a window manager is fun. It will also introduce you to the concept of library dependancies, as most window managers need a bunch of extra lib to work. though Arch linux will help remove much of the pain.

    then...

    STEP 3. Install the TCK/TK language. This will give you a relatively painless introduction to cross platform GUI development as it runs without much modification on UNIX, Win32, and OS X.

    There are pro's and con;s to TCL/TK, but in my opinion the pro's far outweigh the con's. You'll get 1. an appreciation of how badly canvas widgets suck in most other GUI toolkits. 2. an insight into how there is a split between the visual and algorithmic part of coding 3. you'll be able to write complex GUI stuff in very little time, which will make you feel good even though you're still a rookie programmer. 4. Python uses Tk as its default GUI widget set, so if you decide to learn Python in step 4 you'll already know how to use the standard GUI bits in Python.

    then..

    STEP 4. Learn the basic principles of Object Oriented programming. Choose Python or Ruby. Python is good because it's good and you've already learnt Tk. Ruby is better because it's better and it'll set you up for AJAX web stuff when you get around to Ruby on Rails.

    Again master the basic concepts of OOP: Classes, Instances of Classes, Inheritance. Polymorphism etc. Start out with reading wikipedia and follow the a

    --
    - It took western civilisation 2000 years to ensure popular literacy, and now we work with icon driven GUI's. Go figure.
  107. just do a search by Anonymous Coward · · Score: 0

    Just do a search either on google or just on slashdot. This particular topic (or highly related ones) seems to pop up on this site on a weekly basis. I can't imagine any of the 150 or so posts in this thread is going to add anything new.

  108. Programming ? by tuomoks · · Score: 2, Informative

    Just tired but after 35+ years programming.. Forget the languages, easy. Try to get some idea what ( and how ) you want to do. Yes - different languages have different schematics - and that's all. The language really isn't the the problem, how and what is (IMHO ). Maybe it is just me but I see no difference in any dialect ( a language term ) except one is more suitable for the task in hand than some other. You can do all you want in 'C' or in COBOL or Python or FORTRAN or DELPHI or C# or REXX or TK/TCL or plain old assembler or ... ( and even in VB. ) Actually a memory address calculation in COBOL is easier than decimal arithmetic in 'C' ( think financial applications, money! ) or that FORTRAN compiler generates much more efficient code for cluster / parallel systems than any other or that LISP is a perfect solution when you need a flexible system that can bootstrap itself - so, it really depends what you want, how fast, and .. - now the problem today is if it can be supported, not too many people know APL, TAL, BAL, Prolog, ... ask about SNOBOL, RGP or if you go to modeling, how about SIMULA ( OO anybody ? ) So - SQL is easy if you know relational algebra, HTML is just a presentation, Javascript is ???, and so on. Unfortunately ( IMHO ) most coding has gone how to use API, not how to solve a problem. Once you learn how to solve a problem the language really can be whatever you select or in worst case whatever you are required to use. So have fun - I have had ( and still do! most of the time.. ) But don't forget - coding is like a data entry or a ghost writer job - someone else tells you what to do. Maybe not what you want in future. Nothing against the very skilled people doing those jobs ( under rated IMHO ) but not for me, hown about you ?

  109. For fast development: Smalltalk & SQL by chris_sawtell · · Score: 1
    It'll stand you in good stead to learn Smalltalk. Now for the Free Database of choice:- And the books to study:- Get your head around that lot and you will be a very valuable item. Toss in a modicum of accounting knowledge to ice the cake.
    Everything mentioned in the above links is $ free.
  110. Re:Programtic structure by creinig · · Score: 1

    Tutorials like http://pine.fm/LearnToProgram/ should be a good start for this.

  111. Pick an objective by Ifni · · Score: 1

    That's the theme of the method I'd propose. You seem to have already chosen your primary target: web programming (AJAX and Apache and SQL and Unix all come together for that purpose). Now you need to chose the objectives for each sub-step to getting there. This, by the way, is similar to "functional programming", which you will use quite frequently, so it is rather fitting that your educational plan mirrors that.

    First, I'd build a foundation in your environment. In this case, Unix and Apache. This (as everything) is best learned by doing. Build a Linux box. You don't have to compile from scratch using Linux From Scratch or Slackware - you can use Ubuntu or Fedora. The important part really is that you have a representative example of your target environment when you are done - you'll be using this alot.

    Move around in this environment, get comfortable with it. Gain familiarity with the command line. You can use the GUI, but since most production servers won't have one installed, you shouldn't rely on the GUI. The more you can do on the command line, the better.

    With this in place, play around with Apache. Install it (if you didn't as part of the OS install) and look through the configuration file. It is well documented, but for the inevitable gaps, use Google and the documentation on the Apache website. To complete your playing with Apache, you will need to start down your path of learning HTML, but we're not there yet. Install a pachage for Apache - maybe a message board system or photo organizer. It really doesn't matter, just so long as it requires you to make changes to the Apache configuration. It will likely also require you to set up PHP or PERL or MySQL in order for it to function. These will have to be set up in such a way so as to work with Apache. This in turn will help you learn more about how Apache works (as well as the languages or databases you install). As an additional bonus, you now have source code to look at, and probably some HTML samples. So lets move on.

    HTML comes next. It's quick to learn, and, like scripted languages, it is easy to edit and see immediate results - just save and refresh your browser. There are a ton of HTML resources on the Internet - again, Google is your friend. Look at a site and make prodigious use of your browser's "View Source" option. One of the best ways to learn is to look at other people's examples and make changes from there. Here is where Open Source can really help, because it is an endless supply of examples. Keep in mind, not all of them are good examples, but here is where learning resources on the web or at a school or from a book can help you keep from learning the "wrong way" to do things. An HTML style guide would be good here. And you should then choose an objective - a project, if you will - to achieve. Don't be too ambitious, but design and create a small web site using as wide a variety of HTML knowledge as you can. Start simple - fonts and background colors, images and links, then once you're comfortable with that, expand the site to include tables and style elements, and finally move up to style sheets and CSS. Build them by hand, of course. You can't learn HTML if a tool is doing all of the heavy lifting for you.

    Now, let's move into HTML. Others will say you should learn a "real" language first, like C or Pascal. But the reality is that you should learn a language _right_, then the choice of language becomes less important. C and Pascal are very structured, which is why they are often used as introductory languages in college (or even high school) curriculums. While it is still possible to program in them incorrectly, they tend to be more strict than other languages, especially interpereted languages (basic) or scripting languages (PHP, PERL). Though I still recommend prodigious use of example source code for learning these languages, I can't stress enough that you find a good book or two that will encourage you to program correctly and teach you the difference between good and

    --

    Oh, was that my outside voice?

  112. Re:Discrete Math: Foundation of Computer Science by Phemur · · Score: 1
    I completely agree that learning the foundation of technology is the key to learning how to program. I'd even go further and suggest taht the fundamentals of any field are key to learning how to practice in that field.

    When I was in university, one of my professors told us that 90% of engineering problems can be solved with 1st year concepts, since they were the foundations of engineering, and I believe that to be true.

    But Discrete Mathematics and Finite Automata and Computability were not part of the 1st year curriculum, and for good reason. These aren't fundamental concepts. They may be useful, and they may teach you to think in an abstract way, but they're also actually fairly advanced, and you won't need these often in day to day operations.

    If someone were to learn programming, I'd recommend 3 areas of learning. First, programming languages. You need to learn the language without worrying about things like data structures and algorithms. Learn at least one scripting language (Perl, Python, Ruby, etc), one functional language (C should be the one, considering its importance) and an OO language (C++ or Java).

    Second, you need to learn about general programming theory. THIS is stuff like data structures and algorithms. This is probably the most important material you need to learn to program, since this is what you need to solve problems.

    Third, you need to learn how computers work. And for that, there's only one thing to learn: assembler programming. I'm not suggesting you learn how to write full applications in assembly. But you should take at least one course in that language to help you understand how your C/Perl/Java code gets executed by the machine. It will give you a good understanding as to how memory and other hardware relates to the CPU, and how the CPU can take a for loop and run it.

    Good luck

    Phemur

  113. Try to select a sub-field by Anonymous Coward · · Score: 0

    As you say "'s overwhelming to start"

    So, divide and conquer. First, you should try to select a subfield. There are at least three major branches (WARNING: a lot of corners cut, and (slightly) exaggerated):

    • Computer Science: requires a strong background in mathematics (e.g. graph theory, automata theory; will not learn you to program (yes, many computer scientists can program quite well, but that is because they have learned themselves programming skills on top of their CS knowledge and skills). Growth path is Ph. D, PostDoc, professor, or possibly a position with a company that develops software that requires the developers to really know what programming is about.
    • Software Engineering: somewhat in-between CS and Programming, with stronger focus on the process of getting a product out of the door in time then on its internal elegance
    • Programming: for many thing, requires only a basic understanding of mathematics (O(n) notation, understanding of recursion, etc). Programmers typically use compiled languages. Growth path is towards Software Architect (i.e. describe to others what to program), Project Leader (i.e. make sure that others tools and time and to program), team leader (make sure that project leaders get developers that know their stuff)
    • System Administration: requires different people's skills (in particular, you must be or get good at saying 'no' politely), good understanding of security processes, light programming skills (typically using a scripting language such as Perl, python, or ruby. Growth path is towards management

    I would guess that, for you, the choice would be between Programming and System Administration (I do not think those fit for CS would ever pose this question; a programmer who keeps learning can (almost?) become a software engineer)

    If you lik to get things done, Programming is the better choice. If you like to continually improve things without ever finishing it, System Administration might be a good choice.

  114. learn by Anonymous Coward · · Score: 0

    Python first. You use it as a procedural language, or an object oriented language. It is incredibly easy to read.

    learn the basics. make a few console (text input) based programs.

    play with the object oriented side of things. Do some simple bits and pieces. understand classes and subclassing. don't worry about the fancy clever stuff yet.

    read about data structures. think about it, try and use some.

    Get confident with writing simple code, then look into building a GUI version of one of your apps.

    Then, now you have a taste for programming, decide how you want to progress and follow the path!

  115. Re:IT (and programming) does not happen in a vacuu by cruachan · · Score: 1

    So true. I've worked in several big manufacturing/financial companies which recruited sinificant numbers of graduates each year into there IT department as trainee programmers. Indeed I was one myself and progressed up via programmer/analyst through systems analyst to project manager in that environment before heading off to run my own consultancy.

    A common theme in all of these companies was that they were biased against Computer Science students. Instead they'd recruit from any discipline (the apptitude tests took a full day at least in all cases). Whilst they were after good coders, what they wanted more was rounded individuals who could talk to the business people and develop systems to help them. Indeed given the choice between a brilliant coder with no people skills and a good coder who could interact well with people the second would win every time.

    The bias against CS graduates was that they tended to be totally focused on code and not considered the wider perspective. The better recruits in fact tended to be language and bioscience graduates - probably because both these disciplines require a logical mind but with more flexibility than say Physics or other hard sciences (or the the opposite extreme of the humanities and arts).

    Your milage may vary tremendously of course. Obviously the above considerations would not apply in a software company, or a hardware manufacturer or an ISP etc. etc. But by no means every IT career exists in such a hard environment, and indeed if you have good people skills you'd probably find it more rewarding not to be in one.

  116. Are We Teaching Dogs Or People? by Slugster · · Score: 1

    I have heard the "justification" for not teaching students procedural code before, and it doesn't make any sense to assume that another person is so stupid from the outset. It's like insisting that once a kid learns how to use a hammer and nails, that they can never possibly learn to use a screwdriver properly. It's condescending and somewhat insulting.

    When I was in school we learned on (some version of) MS quickbasic, and then C, and then C++ , but in the C++ courses we re-wrote the older C-course programs into objects. I found it very illustrative to see an example program written both ways, so that I could see exactly what each had that the other didn't.

    A lot of this sentiment (that procedural coding needs to be kept "hidden" from soft-minded students) seems to arise out of the observations that when they get hired to write methods, they try to write functions instead. And if that's the case, it's more a matter of disregarding work specifications or unfitness for the position than it is that they were "taught poorly".

    -------

    Also--the best beginner's Java book I have EVER found [at any price] is Java Programming: The Easy Way by Douglas Downing.
    Every chapter tells how to do something basic like console screen output, window/GUI input and output, how to read & write files, get keyboard input, draw graphics and play sounds. Fun stuff that a kid can do on their own. It's out of print now and becoming scarce; I gotta scan my copy someday so I can share it easier. ~

    1. Re:Are We Teaching Dogs Or People? by cyber-vandal · · Score: 1

      when they get hired to write methods, they try to write functions instead

      As a long-time procedural programmer who's also done a bit of OO this statement confused me a bit. What is the actual difference between a method and a function/subroutine apart from the former being part of a class?

    2. Re:Are We Teaching Dogs Or People? by maxwell+demon · · Score: 1
      I have heard the "justification" for not teaching students procedural code before, and it doesn't make any sense to assume that another person is so stupid from the outset. It's like insisting that once a kid learns how to use a hammer and nails, that they can never possibly learn to use a screwdriver properly. It's condescending and somewhat insulting.

      It's not about procedural vs. OO, but it's specifically C vs. C++. If you learn procedural with Pascal, and then OO with C++, everything is OK. The point is that good procedural C generally is even bad procedural C++.
      --
      The Tao of math: The numbers you can count are not the real numbers.
    3. Re:Are We Teaching Dogs Or People? by Anonymous Coward · · Score: 0

      > What is the actual difference between a method and a function/subroutine apart from the former being part of a class?

      C++ functions are reasonably generic, but they're not fully polymorphic because they're always early-bound. If you have a base class pointer, you can't expect C++ to select the right function for the actual type, whereas a virtual method has no such problem.

      Templated classes usually need to use methods too. You can get around it, but it's prone to failure.

    4. Re:Are We Teaching Dogs Or People? by Anonymous Coward · · Score: 0

      >> when they get hired to write methods, they try to write functions instead

      > As a long-time procedural programmer who's also done a bit of OO this statement confused me a bit.
      > What is the actual difference between a method and a function/subroutine apart from the former being part of a class?

      The way I've seen it done most often is to define static classes whose SOLE purpose is to provide 'helper' functions.

      For example, instead of creating a sort() method for the object foo, the programmer creates a "bar" class to implement sorting:

      GOOD: myFoo.sort(AtoZ);
      BAD: bar.sort(myFoo, AtoZ);

  117. Solid Foundations by Channing · · Score: 1
    Here are some basics worth looking at:



    I am sure there are a lot more but I think these would give you a good grounding, the rest is learning APIs, languages, religious arguments and experience.
  118. Checklist by Tetard · · Score: 1

    The first thing you want to as yourself is: is this to gain academic
    knowledge, or practical knowledge that will make you worth something on
    the job market ?

    The second question is WHAT part of the IT landscape interests you ?

    You say programming, but I'll pointedly misinterpret your question
    and focus on "IT".

    Learning about IT is like saying, "I want to become a doctor". Are you
    interested in programming ? What kind ? Systems or UI or something
    else ? What environments ? Traditional (UNIX, Windows) or embedded
    platforms ? High or low level stuff ? Or would you rather learn about
    networking ? In general, or do you want to get a CCIE ? How about
    systems administration ? Or DBA ?

    Third, see if there's not some introductory evening courses you can take
    in some of the subjects that interest you. A lot of IT courses will be
    great to quickly discover a technology, a concept: there are lots of
    advantages to being walked through a topic by a competent person, etc...
    It will open up your horizon to different things, show you some of the
    possibilities you might miss when trying things by yourself -- but in the
    end, you have to burn for it. If you don't, in my opinion no amount of
    courses or training will make you more competent than personal motivation
    to do a good job.

    Last, you want to find out if a CS college course is what you are
    looking for. Don't get me wrong, lots of good people are self-taught
    l33t d00ds with k1ill4h k0d3r sk1llz, but there's a lot of good
    underlying theory to be had in formal programming courses, algorithm
    design, systems architecture. There's many different areas of
    specialization in IT, and some of them you can learn in college, others
    not: for instance systems administration is something you'll have to
    learn hands on, it's a combination of skills from different areas of the
    IT world.

    Anyway, here's a few biased tips -- I'm not a programmer :)

      1. Don't assume Linux/UNIX and TCP/IP is the only thing out there. Windows
    either for that matter. They are very close to each other in terms of concepts
    and implementation.

    2. Now, you said that programming is what interests you. Write code. Try
    different languages. Learn C -- you want to get close to the system to
    understand how it works. Even in the world of Java and C#, it's still a
    very good idea to grok the underlying platform, and why it works the way
    it does. It doesn't mean you need to learn assembly :)

    There's too many people out there programming and making the lifes of
    systems administrators and DBAs miserable, because they don't understand
    the implications their code has on the underlying system (hell, if
    you're programming for a personal computer, then you can allow yourself
    to write on the product box "requires 4 GB of RAM, two Opteron 242
    processors and 500 GB of available diskspace"), because they've been
    told "Java is a virtual machine, you don't need to know anything about
    the underlying OS".

    3. Read some books of course. On OS design, "Design and implementation of
    the FreeBSD operating system" (McKusick, Neville-Neil) is a good book,
    though maybe a bit steep for starters.

    For networking, Tannenbaum's, "Computer Networks" is a very good,
    thorough work on networking technology, from signalling theory to
    cabling to transport and protocols. For IP itself, read Richard
    Stevens', TCP/IP Illustrated.

    In the end, it will still be up to you to ask yourself: do I really like
    this ? Do us a favor, don't become one of those career programmers who
    decided to learn Java or C# because the pay is good and there are lots
    of chicks. Wait, forget that last one. Good luck.

  119. How To Design Programs by pupeno · · Score: 1
    --
    Pupeno
  120. Want to learn EVERYTHING? by mnmn · · Score: 1

    I can relate to that. I wanted that too.

    So I started easy. I built a network of various types after scavenging old 386s.

    Next I wanted various networks. Here at home I have a pile of FDDI, ATM, arcnet, tokenring switches, most of which I have setup and know well (except ATM). I also have a pile of ultrasparcs, an hpux workstation, an rs6000 too. I need to know all UNIX. At least be familiar with them all. I NEED an s390 (zseries) and missed a $500 zseries server on ebay 3 years ago for which I'm still kicking myself. I dont have a 600V power supply anyway, and I'll have to play with an AS400 first anyway.

    So I realize and understand your requirements. The answer is setting rediculous goals. For me it was setting up the latest Oracle on each of the UNIX machines, interconnected with each type of network. Just GETTING to this goal taught me a heck lot although I never reached it.

    Anyway I'm busy with work these days. Its a good job with lots of challenges. Tonight I have to setup two openbsd machines with CARP so that the two unreliable wireless connections (layer 3) can be made more reliable between two buildings. I dont have a budget for cisco routers to do the same, so I have to research learn and improvise.

    If youre after web technologies, just setup a webserver and run a java app, a php webmail and portal, a ruby app and slashcode (to learn perl). Youll run into problems. Then youll have to debug it. That will force you to understand it and sift through it.

    Of course you'll have to have a rudimentary understanding of these technologies first. Just build a basic php webpage accessing a mysql server on your computer.

    --
    "Give orange me give eat orange me eat orange give me eat orange give me you." -Nim Chimpsky
    1. Re:Want to learn EVERYTHING? by (H)elix1 · · Score: 1

      If you want a mainframe, snag http://www.hercules-390.org/ - the zSeries emulator. On current hardware it will run circles around those $500 zSeries boxes.

  121. Go to University by ladadadada · · Score: 1

    Seriously, GO.

    You don't have to sign up or anything, just find the "Intro to programming" class, find a seat and listen. Do the assignments (you'll know if they're right because they'll compile and do what is asked. It might also be worthwhile finding a guru friend that can help you out. These can be found in Linux user groups and in the tech labs at the University)
    In a lecture full of 400 or so people they don't check the roll and kick you out just because you haven't paid. You won't get a degree at the end of it all but you'll have the knowledge and that will make the degree a walk in the park if you decide to go back and do it.

    If there's a choice between a procedural language and an object-oriented language, go for the object oriented one first. If there are follow-up courses in second year, take them too. Lots of the courses in second year such as "Data security", "Networking", "Operating systems" and "Machine Intelligence" rely on you knowing the language you learned in first year and extending your knowledge.

    There will probably be a web-based subject or two; one where you learn HTML and Javascript (and maybe css), the other where you learn server-side scripting such as JSP, PHP or Perl (or one of many other languages.) These are great as an intro to the language but I would suggest while you are doing these courses getting an old machine to act as a server and learning the admin side of the web technologies. Set up a web server with server side scripting and a database and create a website. Write howto guides. I did that while I was at University and I found that the process of writing the guide helped me to understand the language far better than I did before. If they're good enough (and appropriate) submit them to tldp.org or just host them yourself. You can help someone else get through this easier than you had it.

    There will also be some courses on the "Fundamentals of Computer Science" and "Algorithmics". These teach the concepts that will change you from an amateur hacker into a quality programmer. These subjects often involve little or no programming at all but what you learn is about how languages in general work and how a different algorithm can turn the fastest computer into a slug and another can breathe life back into a 486. I have personally written two programs that solve the same problem. One, a 486 could run through in an hour, the other would take more than 200,000 years on the Earth Simulator. (I don't think they'd let me run it.)

    Most of all, as someone has said previously, do stuff. The more programming you do, the better you will get at it. The more languages you learn, the easier the next one will be. The more you tinker with your operating system, the fewer mistakes you will make. The more operating systems you use, the more employable you will be.

    --
    Sig matters not. Judge me by my sig, do you?
  122. Re:Discrete Math: Foundation of Computer Science by monikerboy · · Score: 1

    but... isn't that quite a good idea? If the person driving the car has no idea of how the car moves and stops, then they are in trouble...

  123. Do you want just software, or a wider picture? by TakeyMcTaker · · Score: 1

    From the things you list, it sounds more like you want to learn IS software, with a strong web applications bent, more than "IT". When ever I hear a coworker referring to IT, Information *Technology*, it tends to be more somewhere between software and hardware maintenance, than a programmer per say.
        Having said that, I personally think hardware is a good thing to understand, no matter how abstracted your work is from the hardware "layer". I think what the assembly guys are trying to say is learn something closer to machine code, so you understand the hardware you're resting everything on better. Sure, architects don't need to know how to make bricks, but they sure as hell need to know the physical properties of the bricks in their buildings' walls. Programmers of all stripes should have some basic knowledge of bit-logic and transistors. To the guys proscribing specific languages, need I remind you Object Oriented programming is more a design pattern than a set of languages? Sure, some languages (Java, Ruby) make it easier to fit OO patterns than others (C), but a good OO designer can make ANY language fit their OO patterns, even Assembler.

            Starting fresh, I say the first thing you need to do is learn how to make a good flow chart. Flow chart anything, from your morning bathroom routine through your preparing for bed at the end of the day. You can plug flow charts in to any language -- just use the flowcharts to show your inputs, outputs, and conditional branches, before you need to write one line of code. Other diagrams are better for certain problem types. State machines are great for hardware work. Network diagrams are useful for networking and AI type logic.

            Then learn design patterns. Make your flow charts Object Oriented, so you can re-use them and plug them in to different, larger flow charts, without starting from scratch every time. Learn widgets and factory patterns. No reason to get stuck on a specific language just to learn patterns -- a lot of books use real-world analogies (Starbuzz, Pizza Factory, etc.) for process patterns, pared down to specific languages. I say stick with the real-world until you absolutely need to use a specific language, or specific hardware for that matter.

            To start slowly in coding, start with something simple, like HTML. Many argue HTML sans JavaScript isn't really programming, but a lot of the flow is there, and it's a good place to experiment with the basics. Block structures, attributes, hierarchy, order of operations, etc. And there's tons of example HTML out there -- just click "View Page Source" on any browser.
            The next language to learn is up for debate. I would say it depends on the application you want to work on. If you're parsing text data, Perl and Python have some nice tools. For GUI presentation, Java, JavaScript, or even Flash and PHP are possible starting point for Web/file GUI presentation. Learn C and C++ dead last. They are very powerful and widely used languages, but their syntax is very bloated and counter-intuitive in some ways, for historical reasons. They're all easy enough to learn with some grounding in the basics. I would say Pascal is a good learning language for good coding habits, but it's kind of a dead language now, for other historical reasons. I personally started on LogoBASIC, but that's just showing my age too plainly. :)

  124. Re:Discrete Math: Foundation of Computer Science by dzfoo · · Score: 1

    Bravo! I agree absolutely. Suggesting an end-user learn Assembly in order to use a software application would be like suggesting someone learn about smelting in order to drive a car. But a programmer is the creator of a software application, and therefore the builder, not the driver.

              -dZ.

    --
    Carol vs. Ghost
    ...Can you save Christmas?
  125. Don't even start by Anonymous Coward · · Score: 0

    Why on earth should you waste time on IT? Your job will be outsourced anyway and you'll end up flipping burgers or wiping floors.

    Study law. Become a lawyer instead. You'll make more money with less effort.

    Computers are for chumps, deal with it.

  126. That's a pretty limited view of the world. by fireboy1919 · · Score: 1

    It seems as though you've examined a purely functional programming language (Lisp), and a system-based procedural language (C) and assumed that all language are somewhere between those two rather than, for example, actually trying other types.

    Programming languages don't fall on a single axis between functional and procedural. That's ridiculous.

    If I was going to design a diagram like that, I'd have one point that's purely procedural and put Fortran (NOT C since it has a super-stupendous entirely functional macro processor that can do anything) at the far end, and Lisp at the other. HOWEVER, I'd also have an axis for environment versus compiled.

    Fortran and C would be at the far end of that, but Lisp would *not* because it uses an environment to do its stuff less than, for example, javascript does (there is not even such thing as a javascript native interface). So now we're talking about a more realistic two dimensional system with programming languages that vary in how dynamic they are and how functional they are.

    Then there's a *third* axis for orthogonality (this is important to note because in highly orthogonal languages, there's usually only one way to a specific atomic operation). I'd probably put SQL (the standard, not the one implemented by a specific DB), xpath and RISC assembly as the most orthogonal, with LISP and XSLT as close seconds. I'm not entirely sure what I'd put as the least. Probably perl, VB, and Cobol.

    To go further, though, some programming languages have special characteristics that are completely missing (as opposed to the other things which have degrees of usage) from others, such as single inheritance, multiple inheritance, interfaces, closures, do...while loops, operator overloading, string concatenation operator, and the ability to describe hardware (which is pretty much exclusively the domain of hardware description languages).

    I'm sure there are others, but those are the things I can come up with off the top of my head.

    --
    Mod me down and I will become more powerful than you can possibly imagine!
    1. Re:That's a pretty limited view of the world. by chthon · · Score: 1

      Nicolay77 is right. I have used assembly, C, C++, Cobol, but also Perl, Python, Ruby, Scheme and Common Lisp.

      It is not so much a line from purely declarative to functional, it is that Common Lisp has a whole lot of features from which subsets are implemented in other languages. Common Lisp overlaps them all.

      The only language that is really close in possibilities is Perl. Pity about the (Perl) syntax though.

  127. First python then PostgreSQL by Anonymous Coward · · Score: 0

    Start learning programming with a easy language like python. Just buy a easy book and get started.

    The next thing is to learn standard SQL. SQL in it self is not that special, but it is a must to understand databases in todays world.

    Python will learn you basic object oriented programming. PostgreSQL will learn you standard SQL.

    The next steps after this is up to you. It depends on your goals.

    "Sams Teach Yourself C for Linux Programming in 21 Days" is a nice book after this if you would like to learn more about Linux and low level programming in general. It is genneraly a good idea to go this way after pythong and SQL. It will give you some basic knowledge to build on. C will give you knowledge about memmory and resource handling.

    Next step after this might be Java. You can build further on your knowledge of object oriented programming (python), databases (SQL) and your basic understanding of low level programming (C).

    Java and .NET is the same thing. It doesn`t mather witch one you choose. Java is more mature and have a lot of books and free programs.

    MySQL is not a solution for learning. It is not standardized and it does weird things. What ever else than MySQL and MS Access works. Firebird, IBM DB2, Ingres, MS SQL-server, Oracle, Sybase and others is just as nice. PostgreSQL is free and easy to use.

  128. There are 2 facets : Freelance (or telecommute) by unity100 · · Score: 1

    And corporate style.

    If you are going to work in a white collar environment, going and coming back to work everyday, - you know, the old style - then go for ms related stuff, and also unix, novell and the like ; the stuff most corporations got when the it was booming and now cant easily move away from.

    If you are going to join the big family - ie, telecommute, or work freelance, or work for small companies in telecommute fashion, you know, the stuff most of us do - then go for html, php, mysql, javascript in this order and then get some ajax.

    The reason is that, MOSt of the companies that are getting ecommerce sites, portal sites, publishing sites, - ie sites that will help their business - are small, they dont have their it division, it people, and they want the optimal solution. Php/mysql based software delivers them that. for example oscommerce have become a huge script, with its unlimited variations and adaptations. same goes for much other stuff that a small company might want, and in the same time php/mysql is very suitable and easy to develop apps from scratch upon. When done with php, there are easy endless possibilities of interfacing the script with other abundant scripts on the market, doing virtually any and all stuff.

    Best way to work such interlinked technologies is to define a 'learning' project, and implement it. This way you will have to learn all stuff related, to the extent that they are useful - no more, no less.

  129. Don't assume all the technologies are so different by Anonymous Coward · · Score: 0

    While there are many, many programming languages and tools you would be wrong to assume they are different. A good programmer can become productive in almost any language in very short amount of time. The best way to start programming is to learn how to program, in any language.

    I recommend starting in javascript. In the summary you say it is a basic; this is true, but most modern languages are. One of the key differences between javascript and other languages is that it is not a strongly typed language (variables do not need to be cast to a particular type). This makes things easier in some regards, but difficult in others: it forces you to think about how your variable needs to work, which is a great way to get in to object oriented programming.

    Sit down and write something complex in javascript. Something insane that other people have said can't be done in javascript. You would be suprised what it can do, and by the end of it (even if you don't succeed) you will have had a very valuable introduction to programming, particularly object oriented programming.

    Once you have done that you can start moving in to other tools or languages. Your path should look something like:

    - Javascript
    - Regex (you can use regex in javascript)
    - XML + XSLT
    - ASP or PHP
    - SQL
    - ASP or PHP + SQL + XML + Javascript (aka basic AJAX)
    - Java
    - Java + SQL

  130. Pre Education, Education by jellomizer · · Score: 1

    I feel your direction to the question is wrong. You need to get yourself pre-educated on technology before you go to school on it. Start off by writing yourself simple programs and little games Get use to writting functions and creating loops and solving various problems. This help you get use to solving problems with computer programs. Writing some HTML and Javascript may be a good start or use Python. Once you get use to programming and using that Mindset a college education will help hone your skills get you off some bad habits, teach you some fundamentals you may have missed. But this way when you take classes in different languages and technologies you have some solid fundamentals and you will not be struggling with basic problems when the teacher is trying to show you a more complex process.

    --
    If something is so important that you feel the need to post it on the internet... It probably isn't that important.
  131. Just do it... by dentar · · Score: 1

    The best way?

    Hmm.

    I would start with C. Seriously. Then, choose a project. Then, just start! Hammer your way through it. It'll suck at first and progress will be slow. Then each little thing you learn will take you closer and closer.

    Why C? Most things are written in it and there are plenty of "sample" programs to choose from to view code.

    --
    -- I am. Therefore, I think!
  132. Re:Discrete Math: Foundation of Computer Science by Pr0Hak · · Score: 1

    Your suggestion that one should learn several types of languages is a valuable one.

    I do have one nitpick: C is not a functional language. C is an imperative language. LISP is a functional language. Scheme is a functional language. Haskell is a functional language.

    Here is what the Wikipedia has to say about functional programming

  133. Will Never Understand by Anonymous Coward · · Score: 0
    It's like telling an architect that he needs to learn how to make bricks to be a good architect.

    No, it's like telling an architect the characteristics of bricks, steel, ceramic, cement and other building materials.

    Without assembly (and a class in hardware design) you'll never understand the gap between program syntax and execution. So you'll never understand how programming works, never understand the need for optimization or why some things are possible and others are not.

  134. Learn about data by sphealey · · Score: 1

    In the end it all comes down to data. Languages come and go. Code comes and goes. But it is quite common to find data which has survived essentially intact in structure and content for 20, 30, even 40 years.

    So don't start with any language. Start with building a deep understanding of data: what it is, how it is modeled, the techniques used to manage it. Since most data today is stored in relational databases, next proceed to understand how RDBMSs work in theory and in practice, and how to write good performant SQL. If at the end of the day you understand why "multiplatform code" is a bad idea, You Will Have Learned(tm).

    Now my question for the language mavens: most people of my generation learned procedural languages, and never really "got" the whole object-oriented thing. Most people of the 1990s and later generations seem to have started with object-oriented, but they in turn don't "get" pure the pure procedural approach (and for sure very few of either camp understand SQL). Is there any good learning language that would help a newbie put a foot in both worlds?

    sPh

  135. Local State Unemployment Office by Anonymous Coward · · Score: 0
    There you'll find out how to fill out forms to receive your unemployment compensation and how to request mock interviews with firms that want to hire H1-Bs.

    I say "mock interviews" because these firms don't want to hire you at all: they want to hire a foreign student that they've already chosen. But before they can do that they are required to first interview a set number of native U.S. citizens and reject them as unsuitable for the job. Once they have interviewed a quota of "unsuitable" U.S. citizens they can then accept the H1-B applicant that they wanted to hire all along.

  136. Study Pure Math by mario_grgic · · Score: 1

    And then all those things you mention become trivial :). And I'm not joking.

    --
    As the island of our knowledge grows, so does the shore of our ignorance.
  137. Re:Discrete Math: Foundation of Computer Science by zerocool^ · · Score: 1


    The gp poster may have gone too far into the theoretical side, but his point is not without merit. You can "learn" how to program java, or ajax, or whatever, but without a foundation, all you're doing is memorizing a set of algorithms specific to that application.

    I'm a firm believer in an IT education. I think teaching someone "how computers work" and "how to program" is more important in the long run than "how to program ruby-on-rails". Learning the specific languages means you're immediately marketable - while getting an undergrad degree would mean 4 years + probably 2 of experience on the job - but, in a few years, your degree will still be worth something. If you know the fundamentals, you understand how programing works, you can learn new languages.

    ~W

    --
    sig?
  138. Re:Rebuttal: Google by Etyenne · · Score: 1
    The computer-science programs at Carnegie-Mellon University, MIT, and Caltech aggressively teach theory but require their graduates to complete several massive computer-programming projects before receiving a bachelor of science.

    What's massive on the scale of a University degree is a trivial side project on the scale of the industry. The OP might not have been very articulate saying it, but the problem with CS is that they do not teach you to work on existing codebase (95% of programming jobs out there) and you only work in small, mono-disciplinary team of people roughly of your skill level. That's not how it goes in the industry, where you have to work with many people, both incompetent and genius, on hacked-away codebase doing project that might last longer than you entire degree. To the defense of universities, there is not much they could do to prepare you for that.

    --
    :wq
  139. arrogance by Anonymous Coward · · Score: 0

    you arrogant little youngin..
    select * from blah is easy..

    sql is far from easy.. trust me, and to save you from looking stupid in the future it can scale from extremeley easy to super hard.

  140. Just don't bother. by Anonymous Coward · · Score: 0

    There are enough amateur programmers making unboundedly shitacular software that, for the love of God, don't even start producing crap. We'll all be better off. We do not have a scarcity of talentless hacks nowadays. If you're serious about this, study software engineering at university. If you're not, then sod off.

    1. Re:Just don't bother. by Halvy · · Score: 0
      He should 'bother' because the fact that there is soo much bad software, is exactly the reason we need someone like him who is concerned about doing it right.

      As far as needing Uni, that is true only under certain circumstances like specialty jobs which entail more than just IT knowledge.

      Generaly speaking I would not want to work permanently for a company who just looked at my formal education, but couldn't care less about what I'v done in the past, and my current ambition & Visa-Versa usually.

      -- SORRRY!! But I am still a proud member of SlashDot :)

      --
      I will gladly loose all of life's battles.. in order to win the war..
  141. Re:Discrete Math: Foundation of Computer Science by Etyenne · · Score: 1
    Once you have trained your mind on the fundamental theory, you will discover that most information technologies are quite simplistic.

    Which might be absolutely true, but does not necessarily make you a good IT practitionner. The only guy we have at work who have a solid formal training in CS fundamental (B.Sc in Math, MS in CS) is a real genius indeed. Unfortunately, he does neither test nor comment his code, can't get his priorities straight and serisouly lack social skill. While his code is very elegant (if somewhat obscure), he does not get much more job done than mere MIS undergrads (and thus, not much more revenue). In the end, you need a skillset that match your job. And most IT job do not require discrete math, whatever you believe.

    --
    :wq
  142. Re:Discrete Math: Foundation of Computer Science by macosxaddict · · Score: 1
    You're both completely right and completely wrong.

    Discrete math is the foundation of computer science. I would actually argue that even it's the foundation of thought, but that's a different discussion. Anyone who wants to know about computer science absolutely needs to understand discrete math.

    But the OP asked about IT, not CS. IT is a completely different field than CS, and one can get by perfectly fine in IT without knowing any discrete math.

  143. Start with.. by JustNiz · · Score: 1

    Start with C, (prefereably on Linux rather thn Windows as the API's are more stable and standard) to get basic programming approaches understood.
    Then go to C++, to get a grip on Object-oriented programming.
    Only then move onto Java, then all the web-enabed stuff.
    This approach will help you develop and build a good understanding of computers and allow you to find your own good programming aporach without the unnecessary extra confusion of HTML, XML etc at a too-early phase.

  144. Start with the basics then find out the rest by Geordie+Korper · · Score: 1

    Read Charles Petzold's book "CODE - The Hidden Language of Computer Hardware and Software". It will give you a background in how computer languages and hardware were designed in a fairly approachable manner . After that grounding in the basics, you will be able to see that all the the languages and hardware are just different ways of solving the same problems, and switching between them will be much easier. Then if there is a specific technology you are interested in look it up in a search engine and/or Wikipedia to find out what that specific technology is all about.

  145. 8-bit TV games by tepples · · Score: 1

    explain to me how knowledge in assembly makes a Java-programmer more productive in a significant way?

    Knowledge of assembly language makes asking for a raise easier, by claiming that one is being recruited by a firm that develops embedded systems software or 8-bit TV games.

    But [assembly language] is _not_ the most energy efficient way to learn how to program in a modern environment.

    Modern environment, or modern 32-bit environment?

    1. Re:8-bit TV games by 3770 · · Score: 1

      OK, point taken.

      I was assuming a full blown computer with an operating system such as Windows, Mac OS X, Linux and so on. Not embedded systems.

      If you are into embedded systems then learning Assembly may not just be good, it may be essential.

      --
      The Internet is full. Go Away!!!
  146. Learn the fundamentals -- and jump into the deep by Mutatis+Mutandis · · Score: 1

    This served me well by way of a basic programming education, and when I was involved in restructuring the IT courses for science students we refined it but largely retained the concepts.

    You should start with a two-part theoretical introduction. One half of that should lead to some broad understanding of the fundamentals of computers and their programming. History of computing, Turing machines, basic computer and CPU architecture, basic principles of computer networks, a cursory overview of machine code and assembler, basic concepts of different types of programming (object-oriented, procedural, ...) languages and how they differ, relational vs. other databases, etc. The idea of this is to get the essential background and learn the jargon, so that if people throw new terminology at you, you can at least place it somewhere in the right context. The goal is not to get into any detail.

    The other half of the introductory course should be rather more formal and very well understood before you start to do any programming. Crucial elements of are a good understanding of (boolean) logic and simple probability theory and statistics, a thorough introduction to data representation inside computers (data types, overflow and roundoff issues with data types, data conversion, arrays, pointers, linked lists, structures, etc., etc.) and a similarly strong introduction to control mechanisms (if-then structures, while loops, error handlers, etc, etc.) These are things that are important in almost any programming language, and a failure to deal with any of these correctly is a common source of bugs.

    Once past the introductory course, you can lay aside the theory for a moment, and start programming -- seriously, not typing over simplistic examples from the textbook, but solving real if simple problems. You have to build up experience and the best way to do that is by slogging it out with a real problem.

    It is best to pick a high-level programming language, and I advocate starting with an object-oriented one as it is easier to go from there to a procedural language than in the other direction. At this time I think Java might be the best choice; the essential tools for programming in Java are readily and freely available, and there is less risk of losing a student's time on obscure problems in Java than in say C++. These days C# also seems a reasonable option, but I have not yet studied it myself. And C++ might also be an option, but then at all cost avoid all Microsoftisms -- use g++ if you must.

    Once you have some programming experience, it will be a good time to make a study of more advanced algorithms. (The disadvantage of using Java as a teaching language is that you will never be obliged to write your own quicksort.) The best way to understand these is to implement them, and you can't to that without some programming skills.

    And when you feel that you have reasonable skills in one language, start learning another one. It doesn't matter which one, as long as it is different enough.

  147. JavaScript is NOT basic by Anonymous Coward · · Score: 0

    If you think JavaScript is basic, it's because you know nothing about it. JavaScript is a powerful OO language. Check the source code of a well written app, like FCKEditor.

  148. Start with the basics by JoeCommodore · · Score: 1
    As far as it all being so basic, you will find everything in computers is actually basic, it's just a bunch of basic methods piled upon one another that makes it seem so complex. Stuff being basic certainly isn't a bad thing, in fact you'll appreciate the basic nature of it all after a while.

    If you want to develop for the Web I would say start with HTML and CSS as it's the primary language of browsers (it's not glamourus but to be really good you should know how to control it). As you get going check out Javascript, PHP/Perl/Ruby/Python/Java, an SQLish db, etc.

    If you are going for more of a games or more immidiate interactivity bent, then you probably want to start with C, C++ or a higher level General Purpose language Like Python or VB.

    As you work with one technology you can experiment with the others and see what fits. The important part is if you want to devlop a this into a career you need to do as much DOING (if not more) than LEARNING. Jump in! Make mistakes! Have fun! After a while you will get better and be able to make bigger mistakes... er.. I mean have more fantastic sucesses. (actually both are true; double, triple check your code.)

    --
    "Enjoy what you're doing! If it becomes drudgery, you're doing it wrong!" - Jim Butterfield
  149. Learn the fundamentals. by atlacatl · · Score: 1

    Like anything else, CS and IT is based on basic principles.

    There are two aspect to IT: as a consumer of the technologies and as the creator of different layers of the technology.

    For example, to some HTML may be enough to do what is needed to get accomplished and move on with their lives.

    To others, just pluging in APIs into highly business oriented applications is enough.

    However, there is a that other group of "IT" people who would like to know a bit more about what makes the whole information thing work. And those, I believe are the CS/Math/Engineering guys (when studied formally) or the hackers that play around with kernels and teach themselves how to hack (hack here doesn't mean script kiddies).

    So, I think that in order for anyone to endeavour into "IT" one must choose a level to start and then move and down the chain of knowledge.

    For example: start with HTML.

    When creating HTML pages one encounters web servers. A curious person will learn how to set it up a whole web server to publish the created HTML pages. Once at this level, a curious person may want to try make the web server faster, or start playing with scripts (Perl, ASP, whatever). For some, this is enough. For others, finding out how HTTP works will do it (or move down all the layers in OSI model). Etc., etc.

    Take the other way around (what I call: going up the chain). When creating HTML pages one encounters images (GIF, JPGs, etc.). Some may be curious and start creating their own images to embed in their HTML pages. Consequently, a more curious person may start playing around with graphics programs. Then such person may see moving images and movies and start playing around with Flash. Etc., etc.

    So, in both cases one is always dealing with technology but at different levels. And all levels are OK. And if one has arrived at a full circle, then one is not looking hard enough, or there is not enough interest to keep looking. (Notice though, how HTML is is pivot to everything else).

    Having said all this, if you have a formal education in Mathematics or Computer Science, you will notice that everything is based on first principals and everything comes down to the manipulation of data.

    If there is no formal education, then pick something and be curious and start going up and down the chain. At some point you'll find out that you know more than what you think you know. And most importantly, anything you would have learnt along the way is of value to someone.

    On a final note, you don't need to know everything about anything to be useful to someone or be interested in CS or IT (I like coding, but I don't do assembler coding--I know how to do it, well, I learnt how to do it but I rather not and that's OK with me.

    --
    Esta es una firma en Espanol.
  150. Re:Rebuttal: Google by ACNSlave · · Score: 1
    What's massive on the scale of a University degree is a trivial side project on the scale of the industry. The OP might not have been very articulate saying it, but the problem with CS is that they do not teach you to work on existing codebase (95% of programming jobs out there) and you only work in small, mono-disciplinary team of people roughly of your skill level. That's not how it goes in the industry, where you have to work with many people, both incompetent and genius, on hacked-away codebase doing project that might last longer than you entire degree. To the defense of universities, there is not much they could do to prepare you for that.

    Aye lad, thats the truth. Only on my CS projects, I did most of the work, got the A's, and figured out who I would be working with, for or not hiring at all. :) We have no slackers on our tech arch team, BTW...

    Bruce

    http://neufeldphoto.com/ <-- What I do when I'm NOT programming!

    --
    Today is a good day to code.
  151. Where is the best place to start? by Elyjah · · Score: 1
    Where is the best place to start?



    India.

  152. Instant Karma by Anonymous Coward · · Score: 0

    There you have it. Now, I am going back to trying to master how to cannot-them. And remember, a carrot is more orange than an orange.

  153. basics, current, and get ready to change by whitroth · · Score: 1

    I rather like one person's comment, about an overview of the field, some modern languages... and assembler. When it gets down to the silicon, and you're hours into a debugging session, there are times that you *need* to understand some concepts down at that level.

    Other basics - HTML and CSS, Java (for now), and a good procedural language. Maybe C, maybe Perl (there's *so* much difference in syntax ). But DON'T expect to spend your entire career doing Java, or Ajax, or Achiilles, or other Trojan War heros, or Emerald, Ruby, or any other shiny fad language. The real difference between most languages is trivial syntax.

    As I say in interviews, anyone who doesn't expect to have to learn new languages and technologies, usually on the job, with no training, when you walk in the door (or your manager walks through their door), then you're in the *wrong* business.

                mark

  154. Starting out in IT programming by KnightSlayer · · Score: 1

    Honestly, the best place to start is with the basics: strong and deep Math background, strong understanding of how to code well and efficiently without necessarily using any particular language, how compilers work and best to use them for efficient compiling, how hardware and O/S work together, O/S kernels and drivers, etc..

    Languages in of themselves you can learn rather easily if the foundation is strong. It's only details and specific changes from one to the other...

  155. the basics and your passion by abertoll · · Score: 1

    Like others have mentioned, you basically need two things:

    1) A good foundation

    2) A passion to do it

    (Actually maybe #2 could get you by if it is strong enough.) Like other people have said, programming is NOT about syntax! Syntax changes, and will continue to change as new languages come out. The basics don't change.

    And the passion to do it means you're interested enough in doing something on your own, for yourself, outside of class. I remember there were people who always got A's, but didn't really know that little extra to be a really good programmer because they only did what they had to do for school: never really cared about it otherwise. Everyone gets good at what they like to do.

    --
    "he drew his sword Ringil that glittered like ice... and he wounded Morgoth with seven wounds..."
  156. My personal experience by Alpha27 · · Score: 1

    Based on your question, you threw out things with a heavy web portion in there, so I will assume to some degree you want to learn things for the web, or at least, lean towards that to begin with.

    The way I learned was starting with HTML. I learned the basics until I became moderately proficient. I later learned Javascript, which is a good started language to get you going with basic programming concepts. I next learned Perl, where I found Javascript and the Perl for Dummies book were a great way for me to learn. Nowadays I would recommend starting with PHP since it's a quicker language to pick up from Perl, though, not too different from Perl and C. The main advantage of a scripting language is that there is less to learn. This will give you time to get more proficient in general programming and help to establish the ground work if you wish to learn another language, and get into more low level coding like C/C++.

    I then picked up XML, XSLT and SQL. When CSS was starting to emerge, I learned that as well. I did not get onto the Java bandwagon because all of the environments I worked in, except one, didn't use it. I would recommend though, to learn Java at some level, or even Python because they have a better Object Oriented Model than some other languages, without the extra work you will need to do like in C/C++. You may want to go straight to C or C++, it comes down to your background, aptitude and willingness to learn.

    I can at least tell you I picked up HTML, Javascript and Perl within 1 year of playing with them. You won't be a maestro, but you will have the fundamentals.

    I would also recommend getting some of the cookbooks out there, they offer a number of good points when programming. Also writing programs that mimic that which you want to do will help as well.

    If you provide more information as to where you want to go, I'm sure others will be able to provide better guidance.

  157. The advice I give everyone by Anonymous Coward · · Score: 0

    If you don't already have a strong passion and high level of knowledge for computers by the time you are ready to go to college, then IT probably isn't the place for you. IT salaries are inflated right now, and anyone entering into IT today without an already established high level of skills is going to be very disappointed when their job is later lost.

    There is a tendency for people to look at salaries and then say "thats what I want to be". But like professional athletics, computers are not for everyone. If you you haven't spent your childhood exploring and learning about it for yourself, then you are coming in with a both hands tied behind your back and you're never going to catch up with people who have.

    Thats not to say you can't find work...or improve your own skills. What I'm saying is that if its not your passion, don't push it. Find something you are really good at and focus on that instead. There will come a time when IT has a shake out, and if you don't speak computers like a second language, you are going to find your time spent trying to learn things to be a total waste. IT is becoming overcrowded, and the problems I see every day are created by people who just don't belong in that career.

    Postings like this one, asking "where should I begin", just highlight the fact that you shouldn't begin. If you have to ask the question, you don't have the natural curiosity or the time to really pursue it. You don't ask where should I begin, you just begin and see where it leads you. We don't need more people who lack initiative. Teach yourself. Don't ask where to begin...figure it out. This isn't brain surgery, no one is going to die if you start at the wrong place. But seriously reconsider whether you need to start at all. If you have no passion for computers and IT, then you stand to get into a job that pays you too much and allows you to build up debt which you won't be able to afford when the shakeout finally does occur.

    1. Re:The advice I give everyone by Jerim · · Score: 1

      I have to disagree with your notion that by asking where to begin, that the poster lacks a natural curiosity about IT.

      In fact to me, it shows exemplary curiosity. If they didn't ask then I would say it isn't for them, because they obviously don't care enough to even ask and instead they just wind up reading random textboxs never really grasping the fundamentals. People learn by asking.

      Especially considering that the IT landscape is many times wider than it was 20 years ago when the industry was just getting on it's feet, I can see how daunting it is to jump in. Should I learn this first then that, or that then this? You dn't jump to Calculus III if you haven't taken I and II. It is hard for newcomers to know what is begginer material and what is advanced material. Thankfully I have a school that guides my studies. They make sure that I don't jump into data structures before I have taken a few math and programming courese. Not all people have the sort of guidance.

      I encourage everyone to get into IT if that is what they want to do. Things such as you are too old, not smart enough, not curious enough, not rich enough to afford training materials, etc. are all just excuses.

  158. Re:Study Pure Math??.. BUT WHY!! by Halvy · · Score: 0

    I'v coded for years with little need for extensive math or it's knowledge.

    When the time did come, I would learn what I needed for that project, and that project only, therebye saving me time, agravation and sanity.

    Why do soo many people act like you need to be Einstein to program?

    NOTHING can be farther from the truth, unless you are going to create unusually extravagant projects like OS's, and full blown major apps like Word Processors, etc.

    PLEASE stop scarring off potential great candidates with old-wives-tales.. PLEASE STOP IT!!

    -- The InterNet is a terrible thing to waste, lets arrest Bill Gates and shut down Microsoft immediately.

    --
    I will gladly loose all of life's battles.. in order to win the war..
  159. Re:BSCS in the U.S. hahahahhahaha by pete6677 · · Score: 1

    Cubicledrone, is this you posting under your other account?

  160. The dangers by bblboy54 · · Score: 1

    I, for one, think that they should teach classes in high school on the dangers of entering the IT field. I wish I would have known these things years ago because there are many times those "sanitary engineers" seem to have great jobs!

  161. Re:90% of replies are crap, & 10% are Wondrous by Halvy · · Score: 0

    I can't believe all the great posts that some folks put sooo much effort into here are not even getting modded, but the /. management has time to deal with trivial stuff like this!!

    -- Watch out /. here comes Digg :)

    --
    I will gladly loose all of life's battles.. in order to win the war..
  162. It's not about the language by BrainRam · · Score: 1

    The language you choose to learn is irrelevant. Like many fields of knowledge, the most important thing you can do is create a mental model of a computer that allows you to deduce more information.

    So don't think in terms of a language. Pick a language to learn, but then try to understand what that language is actually doing. If you break down the standard C "Hello World" program, for example, you'll have tons to digest. When I define a string, what does the compiler do with it? How does it get passed to the printf funciton? What is a pointer? How does the compiler take my text and turn that into executable code? If you pick another language, you'll still have many of the same quesitons. The language is irrelevant.

    So pick a task that you are passionate about. Pick a language that sounds interesting to you. And then start trying to solve the problem. And when you find that your mental model is insufficient, extend the model so it maps to your new knowledge. When you decide to learn a new language later on, odds are that 80% of your model will still apply.

    I've seen a lot of people who learn C, and then move to another language and can't figure out why they don't need to end lines with semicolons. Or they don't understand how Java can do without pointers when they always needed them in C for structure arguments. The problem is not that they are stupid, it is that they don't really understand what is actually happening in the system as they code. Think about this from day one, and you'll have a much easier time of it.

    And I'm not suggesting that you understand every nuance of the system. Odds are you be worrying about caching characteristics or interrupt timing for your first 50 or so projects. Many professional developers are clueless about the real hard-core system details. But the succesful ones all have a sufficient mental model for the level of work they do. And that's how they can adapt to changes in technology, languages and all things programming related.

  163. Ask expericence! by omar.sahal · · Score: 1
    How to be a hacker Eric Raymond has written this how-to that covers some of what you want.


    http://www.catb.org/~esr/writings/taoup/html/Also The Art of UNIX Programming this is an in depth programmers view of the UNIX operating system and related programming languages/utilities. If you don't like his style (He's a little to Guru for some)he also mentions other books/works that can give you help on related topics.

  164. Re:BSCS in the U.S. hahahahhahaha (to you maybe).. by Halvy · · Score: 0

    I kept waiting for you to say you were just kidding..

    Just because every time you pick up the fon for tec support these daze and you get a rag hed, doesn't mean ALL tec is moving off shores.

    By the way, I use that term 'rag head' lovingly ;).

    Furthermore, those Indians are MUCH better at being nice & knowledgable than the former USA reps!!

    AHHHND, whooo wants those jobs anyway?? You? NOT me!

    And PLEASE do tell us, since when is a potential programmers presence in the United States, stoping them from writing the next 'Killer App'?!

    Not to mention, the miriad of work that needs to be done in OSS for the obviouse eventual down fall of M$??

    -- Firmely entrenched into 'Bad Karma'... now I can FINALLY speak my mind.

    --
    I will gladly loose all of life's battles.. in order to win the war..
  165. Python is a very good "first language" by Anonymous Coward · · Score: 0

    It's very C like, highly interactive... Python.org --> Documentation --> tutorial will have you programming in minutes.

    Python removes you fron having to deal with annoying header files, makefiles, declaring data types, etc. Newbees can always learn that later. Although syntax is similar to C, it is consistant, and very easy to migrate to C or C++.

    J

  166. And if you are not a 'black female', etc... by Halvy · · Score: 0

    Being a black female with a disability also helps. (seriously I mean. Make use of anything you've got, it is YOUR future on the line (*) )

    LoL!! And if you are like me, the largest 'minority' of all...

    Ta da.. a 'White Guy'!! You can just rely on:

    Ta DA!!

    1) Uncle 'Pell' (Grant) or..

    2) You can get a job and pay your own way!!

    * I'll expect my Noble Prize for the 'Duh' award anytime soon :)

    -- Firmely entrenched in 'Bad Karma'... Now I can FINALLY speak my mind.

    --
    I will gladly loose all of life's battles.. in order to win the war..
  167. Re:Why IT? (I'm not saying you are totaly wrong).. by Halvy · · Score: 0

    Buhhht, reallly, NOONE can stop a man from working.

    Even in ANY of the Engineering disciplines. :)


    -- My favorite thing about OSS.. IS its militancy!!

    --
    I will gladly loose all of life's battles.. in order to win the war..
  168. That's a pretty limited view of lisp. by Nicolay77 · · Score: 1

    I know you're trolling, but I will answer the post, just to avoid that you mislead some readers.

    I know there are languages that don't are/fit in that line. They are Fortran, ML, Haskell, Forth and Ocaml. And may be prolog, and cobol, but they are of little interest. I've heard very nice things of Ocaml, and I want to learn it in the future.

    So yes, this is a limited view because it doesn't include these languages, and that's why I said "Almost every language" instead of "Every language". But it's not much limited, because those other languages are almost never used except for academic purpouses, and even now people are just getting some interest in Ruby. And the languages included are the most used programming languages, that comprise 99.99% of all code written.

    Now you say: "Programming languages don't fall on a single axis between functional and procedural. That's ridiculous." I totally agree with that.

    The part you got wrong is that Lisp is not a purely functional programming language. It's not been for about 40 years. It's just the first ever functional programming language. Lisp can do imperative, procedural, object oriented, aspect oriented, and who-knows-what-comes-next programming just fine.

    On the other hand, Haskell IS a pure functional programming language, and ML and Ocaml are mostly functional programming languages and that's a reason for them to not to fit in that line. Forth, being stack based, is a whole different beast, it couldn't fit even if we try. I don't know Fortran, so I could not place it in the line.

    However, there is a reason for that line.

    It means: In this extreme (C) you're can do this: imperative structured programming.

    Move a little (C++) and you can still do that, but you have this too: object oriented programming, generic programming.

    Move a little (Java), and you can still do what you did (except template-metaprogramming and some other stuff), but you have this too: garbage collection, multiplatform runtime.

    Move a little (Python), and you can still do what you did, but you have this too: dynamic typing, first order functions, closures, an interactive prompt.

    Move a little (Ruby), and you can still do what you did, but you have this too: anonymous blocks / lambda functions, continuations, some automatic code generation, native big number support.

    Move a little (Lisp), and you can still do what you did, but you have this too:
    -CLOS: The most powerful object oriented system. In normal object oriented programming, you have single class method dispatching, in CLOS you have any number of classes method dispatching, pre and post methods, and several other stuff.
    -Native Rational number support.
    -Full functional programming.
    -Lisp macros, the stuff that makes Lisp a programmable programming language and can make lisp adapt to any paradigm you want, like aspect oriented programming (which was in turn inspired by CLOS).

    Lisp is even more multiparadigm than C++!

    This line also lies in the axis of compiled vs interpreted. However due to heavy investment in that area most Lisps are compilers too, so there is a performance jump going from Ruby to Lisp, toghether with the expresiveness jump and the weird parenthesis syntax. Lisp needs the parenthesis syntax because of the macro system.

    In fact, if there is a problem in the line I drew, it's in the jump from C++ to Java. Java can't do everything C++ can. In fact, java is a very limited programming language, compared with the ones around it. It just has an awesome IDE and a shitload of libraries.

    If I had put Haskell in the other end of C, instead of Lisp, your post would had made sense. But it does not.
    I guess you need to learn more about Lisp. It's been evolving for almost 50 years.

    --
    We are Turing O-Machines. The Oracle is out there.
  169. Learning by doing by iion_tichy · · Score: 1

    Just learn the things you need on the fly, and only them. Don't try to understand everything before you even start.

  170. Re:Mainframes-- Well You're Right About 1 Thing.. by Halvy · · Score: 0

    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..

    It DOES sound a little strange :)

    This person is suppose to hon skills that 'might' be valuable in '5 years'??

    LoL.

    But what is even more amazingly strange sounding, is you got an 'Insightful'+4 for a remark that is sooo.. 'ridiculous'.


    -- /. is disintegrating right before our eyes.. :(

    --
    I will gladly loose all of life's battles.. in order to win the war..
  171. Re:So many responses, so much BS-- YEA RIGHT!! by Halvy · · Score: 0

    assembler? why not start out with maths and physics first? them move up to electronics and the such. and dont't forget the holy scriptures and valium in between for soul nourishment.

    Lol, I thought the same thing. Assembler to 'start out with'.. so you'll 'learn'??

    Assembler at college level is considered one of thee HARDEST courses!!

    WHHHY would anyone want to be soo discouraged right off the bat!

    The bottom line, and the FACT is, programming in general, is like math..

    If you were born with a 'nack' for it, fine.. but if not.. well, you will be VERY miserable in it-- the rest of your life.

    Again, I'm amazed at the posts that are getting recognized by /. management recently, as; 'Insightful'... when the poster was clearly trolling by acting like noone else has posted anything worth while today in this thread.

    Then again, maybe /. is using the 'other' meaning for the other word: INCITEFUL.


    -- /. is disintegrating right before our eyes.. :(

    --
    I will gladly loose all of life's battles.. in order to win the war..
  172. Re:Best way to start...NOT!! by Halvy · · Score: 0

    Ok, this takes the cake... someone who was/is in 'Psychology' & Criminal Justice, telling a new programmer how to go about it!!

    I tried to find some good/correct/possitive things in this: 'Interesting' +3 modded post.. reallly, I did!!

    lol.. but telling someone to 'work closely' with someone who already knows the 'stuff'??

    Ahhhnd, goto your local library, for 'NEW' books!!

    That part is not even vaguely amusing, let alone correct.

    You will NOT find any newer books than at your local book store or online-- NOT in the library; they are rarely up2date, especially with the RepublicanTs in power.


    -- Shheeeesh.. I beginning to feel like an old 'wash-woman', who should be paid by /. management for cleaning up their crap!! :)

    --
    I will gladly loose all of life's battles.. in order to win the war..
  173. Re:PHP-- Is NOT a programming language.. by Halvy · · Score: 0

    Neither is html.. they are scripting 'languages', or 'mark up' languages, but not 'programming' languages, by any stretch of the imagination.

    Just thought I'd clarify that for the person who is asking for help.. since there is a word of difference with these concepts and areas of programming.


    -- /. is disintegrating right before our eyes.. :(

    --
    I will gladly loose all of life's battles.. in order to win the war..
  174. The reverse is also true... by C10H14N2 · · Score: 1

    You need to be a specialist AND a generalist.

    Have a big bag of tricks to solve problems, but specialize in the problems you solve. You can have all the language skills on the planet, but if you don't have a specialized field in which you apply those skills, you will not have an edge against the armies of similar Jacks-Of-All-Trades out there whose resumes also read like a bowl of Alpha-Bits.

    1. Re:The reverse is also true... by Fred_A · · Score: 1

      Absolutely, just be a specialist in everything. Problem solved ;)

      I'd go the generalist way myself (went that way actually both in and out of IT) because it's more fun. Besides I rarely ever had to do the same thing twice, had to learn some new stuff on pretty much each project.

      --

      May contain traces of nut.
      Made from the freshest electrons.
  175. Start with... by Anonymous Coward · · Score: 0

    choosing a different career. Unless you want to move to (or already live in) a third-world country. The whole information services industry in the developed world has become viewed by management and finance as something like the cleaning service staff. Necessary, but entirely expendable and easily replaced. Not the kind of career a person with any potential would choose these days.

    1. Re:Start with... by chawly · · Score: 1

      I noticed this bit and wondered if you were going far enough

      "as something like the cleaning service staff".
      I would have put it slightly differently:
      "as something like the specialised cleaning service staff".
      and taken some care to avoid mention of a specific speciality. I would suggest - as you do - that another line of work would be good. But if our friend wants to persist, he might consider aiming at becoming a manager in the IT field. After all, IT managers who know anything about what they're managing are very rare indeed.
      --
      How many beans make five, anyhow ? ... Charles Walmsley
  176. Re:Discrete Math: Foundation of Computer Science by Jack9 · · Score: 1

    In my experience there's the end user, administrator, programmer (builder), and software engieers (designer). Each have their own overlapping niche. Learning to program, in general, does not require one to be overly familiar with discrete mathematics. My brother is 12. He can program in BASIC.

    --

    Often wrong but never in doubt.
    I am Jack9.
    Everyone knows me.
  177. books by kermitthefrog917 · · Score: 1

    if you SEARCH around... there are a TORRENT of good sources. OREILLY'S generally produce good books. note.... Those three words are in caps for a reason....

    --
    I may be wrong but you're downright ugly!
  178. Think top down by Anonymous Coward · · Score: 0

    Don't aim to be a programmer per se.

    Pick a domain that you're interested in: finance, GIS, retail, transportation. Then find out what technologies are typically used in that domain. If you don't like those technologies think twice about the domain choice... Certain domains still use mainframe computers for example. While others focus mainly on destop GUI apps. Others mostly web-apps.

    Then spend some time reading up on what companies, or OSS communities are involved in the technologies required for your chosen domain. Also, don't ignore Operating System trends. Some domains will generally be O/S agnostic, while others will tend to pick a certain O/S (like Windows). These will affect your platform choices.

    Once you've figured that all out, pick a language to learn and have a 2 and 5 year plan to progress in it. Also plan to learn a new language and/or technology every 12-24 months in addition to your primary bread-winner technology. Get certified. Not because it actually means anything on paper, but because it motivates you get better. Go to symposiums/seminars in your chosen technology to meet people who are actually using it.

  179. Re:Discrete Math: Foundation of Computer Science by Anonymous Coward · · Score: 0

    While you are correct that it is necessary to learn the theory first, a stronger foundation is required for proficiency in IT. The best idea is learning category theory first (Barr & Wells) and then once they have progressed to the notion of a cartesian closed category, they learn the lambda calculus and begin writing programs (on paper). After that, studying Moggi's work on computational monads should give the neophyte adaquate preparation to understand state. It is at this point that the shift to Haskell should be made. Automata should be studied along the way, but more emphasis should be placed on what is really going on: studying subsets of a free monoid! Needless to say, combinatorics, graph theory, mathematical logic and group theory should also be studied. Once Haskell has been learned, I recommend studying TAOCP as this teaches assembly + data structures + algorithms.

    I can't tell you how many times I've bumped into people who thought they really knew their IT but when it came down to it they knew nothing. Truly pitiful. You wouldn't believe how many people out there give me a funny look when I tell them Russell's paradox is actually a special case of Cantor's diagonal argument.

    The above may seem too theoretical to some but it has immense practical capability. For example, say you needed to program a blender and wanted to use fuzzy logic. Well, I can't tell you how much it helps knowing that fuzzy set theory does not exist in a topos, but it does exist in a quasitopos. Right there you have a ton of peer-reviewed knowledge to build off of!

    You can thank me later.

  180. SQL not basic by Zarf · · Score: 1

    Okay, okay, so SQL practically reads like english... that's all great... however, there's this whole thing called "The Five Normal Forms" that many people who dive into SQL never learn. I find that many people who jump in and learn Perl, PHP, and some SQL can create these fabulous messes of a system. That's usually when I get hired to clean the mess up when the company realizes it can't double its growth again until somebody fixes their "database" that some scripters piled up with a muck rake.

    Do yourself a favor. Don't just be another script kiddie with a muck rake. Really learn the technologies you're working with well. Get a depth of knowledge. Learn not just how to do a thing learn why you do it. Don't just think of how to solve a problem... think of how best to solve a problem. If you aren't experienced enough to know a few different techniques, that's okay, just think about alternate ways you could do the same thing. As you build this catalog of alternate techniques you could begin to see when one way would have saved work and another made more work than necessary.

    A good theoretical underpinning will serve you well. It will give you the right "why" questions to ask but it won't give you the answers. If you can't get a college degree right now or are too busy for one then try and think ahead about the life of your project. Think about how it will evolve and grow. Think about what you'll need to know when you hit those road blocks. The key is thinking ahead and reflection on what you've done. Think how you could make it better.

    Whatever you do in the long run don't short change yourself! Get your magical piece of paper that says you have a four year college degree. It really is the most valuable investment you'll ever make. Unless your current project has a name like Microsoft or Linux you'll eventually want that degree.

    Figure out what you want to do, what you can realistically do, and what you can get paid to do. Start pulling apart what the needs are, why they are what they are, and how they will evolve. Then you begin to apply yourself to these domains. If that's too hard start scanning the tech sites and figure out where the most jobs are and buy a "teach yourself in X days" book and go to it cowboy. Once you wrangle that job start in on what the company you work for really needs, why they need it, what they can pay for, and how their needs will evolve then get to work inventing the future.

    That's what the difference between a job in IT is and what a career in IT is. A job in IT is just setting up a spam filter... a career is making the spam filter better... or inventing a new spam filter. The difference between a job in IT and a career in IT is the difference between dealing with the future and inventing it.

    --
    [signature]
  181. Re:PHP-- Is NOT a programming language.. by cookiej · · Score: 1

    Oh, puh-leeze.

    They might not be compiled languages, but they sure as hell ARE programming languages.

    Go back to whatever institution you graduated from and ask for your money back.

    Mod parent to Troll, please.

  182. It all boils down to... by kiwipom · · Score: 0

    The reality for most people working in software development is using a C (C, C++, Java C# etc) based language talking to a relational database, so if I were you I'd do the following
    1. Learn how to do simple projects in a C based language, including how to create make/build files, use the compiler properly etc without the use of a graphical ide.
    2. Learn how a relational database works, I don't mean how to administer it, I mean DDL, DML, SQL, etc and a bit of relational theory.
    3. Put the first two bits of knowledge together to create more complex projects (this is probably what you will spend most of your coding life doing).
    4. Learn to program. This is very different from learning a language and is all about how and when to use data structures, control structures, patterns etc. N.B. This step will take most of your career to accomplish to a high level.
    I'm sure this comment will get flamed by people doing work with LISP, Ruby, Perl etc, but in my 12 years of experience most of the real world work is done using the stuff above.
    As to learning app servers, HTML, JavaScript etc, feel free to learn those as well, they're easy to learn and so give you a few quick wins in what is going to be a reasonably taxing task, but don't think these are what programming are about. The interesting stuff is at the backend.
    Other than that, enjoy it, coding is creative and fun!

    --
    Dum spiro spero
  183. UNIX/C ARE Computer Science by obnoxiousbastard · · Score: 1

    There are several books that every programmer- student or professional should have in their library. Master them and you will know the inner way of geekdom!

    The Art of Computer Programming- Knuth, Donald. This is an ongoing multi-volume set by one of the legends in the field. The first three books are Fundamental Algorithms, Seminumerical Algorithms and Sorting and Searching. Dr. Knuth is working on more of these books but I can only vouch for the first three.

    The C Programming Langauge- Kerninghan & Ritchie. C has become almost a ubiquitous programming langauge covering all sorts of applications from hard core systems components to user applications. Who better to learn it from than its designers? (I suggest the 2nd edition.) Even if you plan on programming in C++, a strong familiarity with C is very useful. Where do you think all those nifty library routines in C++ come from?

    The UNIX Programming Environment- Kernighan & Pike. UNIX and its derivitives account for sizable percentage of the worlds servers. Knowing how to develop software in and for the UNIX environment goes a very long way towards successful employment. This book is a bit dated but its is a good start in learning about development environments.

    The Design of the UNIX Operating System- Bach, Maurice. This book is often used as a textbook for undergraduate and graduate level courses in operating systems. It shows you how UNIX works from an under-the-hood viewpoint that many Operating Systems hide like Granny's bloomers.

    Numerical Recipes..- Vetterling & Press. There are several versions of this book covering computational numerical methods in FORTRAN, C and C++. Most courses teach the C and C++ versions of this book but the FORTRAN version can come in handy if you have to deal with legecy FORTRAN code.

    Introduction to Algorithms (2nd edition)- Cormen, Leiserson, Rivest & Stein. I have been in the business of programming for over 20 years. I still have all my hair and most of my wits because of Knuth's Art of Programming series and this book.

    O'Reilly Books- Over the years I've watched this publisher rise from a small geek-press to a publishing powerhouse. Their books maintain a rigorious level of excellence and cover a diverse number of topics. If you must deal with any given software, compiler, operating system or database; chances are that O'Reilly has several indespensable books about it. In fact their book on Sendmail has become the defacto documentation for that vital utility. Bookmark these guys.

    I have not covered the topics of Objected-Oriented Programming, Analysis and Design, C++ or JAVA. These are important topics which deserve much more attention than I could give them here. Nicholas Wirth is also an author who deserves a look- Literate Programming is a worthy book.

    You may have noticed that the list is UNIX/C oriented because IMHO that is Computer Science. All other OSs are disposable or redundant.

    Oh yeah- you don't have to spend a $1000 bucks and get them all new. Check out E-bay, Half.com or Amazon's used books sections for very deep discounts. Just be clear on the edition that you are buying.

    With some talent and hard work, this list will take you far.

    Best of luck,

    OB

    --
    Is that a SCSI connector or are you just glad to see me?
  184. What about hardware by methuselah · · Score: 1

    I find it interesting that there has been very little mention of hardware. Isn't the T in IT Technology? Doesn't that mean harware? Just curious what good is software without it? Being able to drive a car doesn't make someone a mechanic. I dunno? Maybe its just me. My original computers were so crude and parts so dear I had to understand the "system" in order to have one. So that knowledge just struck me as vital. I needed a computer before I could even think about programming it. I'll say this understanding mechanically what is happening inside that box helps me.

    1. Re:What about hardware by jem86 · · Score: 1

      I was going to ask the same question.

      Learning how to program is all fine and funky, but it doesn't help when your computer breaks down and you can't get to any of your programs.

      I am an IT Technician with experience in hardware and software maintenance AND a web developer with knowledge of various languages - proof you don't have to just specialise in one or the other.

  185. try ruby on rails by Anonymous Coward · · Score: 0

    try ruby on rails which is a good start without knowing anything.

  186. How I started... by hyperpixel · · Score: 1

    I started working with Perl. I tried learning C at the same time and found myself bouncing back and forth quite a bit.

    Try taking a look at a bunch of languages and choose what appeals to you. Learn that one, but don't stop looking at the othe languages. You need to find where you feel comfortable - there is no hardfast rule for learning; your brain is your own.

    Just remember not to get to absorbed in one language. Once you start learning it, try to relate what is similar between the different languages and when you feel comfortable don't forget to challenge yourself in ASM (assembly). You should probably take a look at C when you're doing this.

    C is where it's at. I'm not saying to start here, but you will need to learn this to become an effective coder. I personally feel you will not become an effective developer without it. (coder != developer)

    Most importantly; have fun, embrace frustration, and don't forget the basics (data structures, search, sort, etc...).

    Cheers!
    Mike

  187. Why... by mario_grgic · · Score: 1

    Because Pure Math is one of those disciplines closest to the inner workings of the mind. It really does teach you to think clearly, to analyse, deduce, synthesize, create knowledge, research, explore, and be critical. It teaches understanding not just a body of knowledge. And math is also a language. Quite expressive language at it too. It's the language spoken by the universe.

    Depending on how deep you go into it, and how long you exercise your mind, other things like computer languages (which at its formal abstract level is a pure math discipline really, grammars, syntax etc) become mundanely trivial. Now using a language to solve a concrete problem may be a lot more interesting, but such problems rarely arise in business and commerce.

    --
    As the island of our knowledge grows, so does the shore of our ignorance.
    1. Re:Why... by Halvy · · Score: 0

      Mario I agree with you.

      However my point was not the possible benefits from taking alot of upper math, but the necessity of it, in most projects.

      Lets face it, even one math class can be little more than a futile battle, which will leave many people with an even worse feeling about taking any more math related subjects, or majors that will require heavy math.

      This could 'rub off' on potential creative programmers, who might 'think' that if they can't tackle Calculus, then they will not be a 'great programmer'.

      I wanted to point out that unless the person interested in learning programming was sure about what type of projects he/she might be interested in ultimatly (ie. game writing, OS development, etc.), that taking alot of math may or may not be required.

      In other words, obviously most engineering majors would indeed have no choice but to learn all aspects of upper-math.

      This may cause someone who is 'terrible' or hates math to not choose that discipline, or be quite ineffective, or 'miserable' if they decided to continue on.


      -- Solidly entrenched in 'Bad Karma'.. now I can finally speak my mind... 10 times per day-- the new 'limit' set by the same /. management that claims we should not worry about Karma ratings.

      --
      I will gladly loose all of life's battles.. in order to win the war..
  188. What Is You Want To Do? by LifesABeach · · Score: 1

    To start an education, go to school.

    To learn about 'IT', go to school.

    If the above seems to time consuming, focus on some aspect of 'IT', and go buy a book on 'begining how to...'

    But what is it that you want to do with this knowledge, once you have it?

  189. Re:Discrete Math: Foundation of Computer Science by dzfoo · · Score: 1

    You missed the point. It is not a *requirement* per se, but as some previous poster claims, it helps, say, for an engineer to be familiar with the strength, abilities, and limitations of the building materials, and to have an understanding of the respective processes that bring them to be, in order to more effectively design structures which will use such materials.

    Notice that *nobody* has suggested so far that the original poster _must_ learn Assembly in order to do programming, but that understanding the lower levels of abstraction will help him creating more effective code.

          -dZ.

    --
    Carol vs. Ghost
    ...Can you save Christmas?
  190. Re:Don't start with the tools, start with the conc by ZeroJack · · Score: 1

    I second this. "Start with an idea you have for something that you have a passion for". I'm 10+ years into software, know a lot of languages and have endured many a fad and religious debate. If you have a passion for something, trust it, begin there and keep it alive.

    My passion back in mid 90's was C/C++ and Windows API programming and I wound up working for McAfee. Now, my passion is Perl because it lets me focus on the problems I am interested in. Different platform, different application, different tool. I am also getting into Java lightweight frameworks, not because it's a marketable skill or because it's a great technology, but because it is close enough to the ideal technology for a specific application.

    Where to begin? How about Javascript? All you need is a text editor and a browser. Javascript is useful, object-oriented technology. I agree with an earlier remark that starting with command-line is helpful for a couple fo reasons. First, it forces you to focus on the essentials and second, it serves as an example of a working program with no bells and whistles.

    As soon as you get interested in knowing how something works or fixing a bug, you will want to know how to "divide and conquer". Command-line programs can be tremendous time-savers, yours and your customers/users/employers.

    I also think you have to be very practical if you want to pursue your passion. I loved the book 'Code Complete' because it helped me quickly benefit from other people's vast experiences.

    Read stuff that interests you. Write stuff that interests you and try to keep an open mind.

  191. Learn Concepts by Jerim · · Score: 1

    What you need to do first is realize that all languages are pretty much the same. There are basic concepts that all modern languages will share. It doesn't really matter what language you pick, although I recommend C++ just because it is more "hands on" than other languages. Java and Visual Basic feel too "light."

    Once you have picked the language here are the concepts you need to learn in order:

    1) Basic input and output
    2) Variables
    3) Pointers - I chose to put it here because it isn't really that hard a concept and it goes very well with Variables. However, in most books you will see it listed later in the chapters, as an advanced topic.
    3) If/Then statements, and Switch/Case
    4) Loops - There are all several kinds of loops.
    5) File access - this is opening and closing an external file for reading and writing.
    6) Arrays - Some would probably argue that you need to know this before file access, as you will most likely be reading the content of that file into an array. I chose to put it here because you can learn file access without an Array. It is more important to learn how to open, close, read and write a file and to realize that you can do multiple things with that data, instead of being locked into reading it into an array.
    7) Functions
    8) Classes

    Once you have learned all 8 of those, you are well on your way. You can pick up most other languages and be able to get a handle on them pretty quickly, because you now understand the techniques. Take extra time on classes. I found it the hardest one to learn. The concept isn't bad, but the various steps you have to take to write your own class can take a while to get down pat. Also, start experimenting.

    From there I recommend two other concepts:

    1) Database connections - This is how you open a database table from within your application and read and write to it. This is very handy knowledge as almost every program in the business world is going to read/write from a table.

    2) GUI - anyone can make a calculator like program in a console window, using text. What people are looking for is someone who can give them a nice GUI with buttons to click on and maybe some nice animations.

    It doesn't matter which order you learn the last two. Last piece of advice is terminology. I run into people all the time who use method and functions interchangebly. Furthermore, they swear their usage is the only correct one. It is easy to become confused when one book calls it this and another book calls it that. Just learn the concept and you will always be able to figure it out, regardless of what someone calls it. A few pointed questions and you will realize that your supervisor just described a function, even though he calls it a method. Or the new boss keeps calling it a header file when he meant a definition file.

  192. Re:Discrete Math: Foundation of Computer Science by Jack9 · · Score: 1

    While I do not disagree with your point of view I believe you miss the poitn. The original question is how to best approach an IT learning regimine. I am a pragmatist and believe that suggesting one learn higher order concepts is self defeating, as one would invariably be that much farther from practice for every conceiveable topic that might help them be a better tech. Howabout ethics, howabout contract law, howabout fridgerator maintenance and repair for those occasions when hardware is overheating? Coupled with the realistic assessment of the average intellect, let everyone start with such abstractions as servers, file descriptors, networking protocols, and then HTML. having taken a class in Discrete Mathematics may help them produce higher quality code, but I rather a coworker have actually USED Assembly to produce an optimized demo in the past. Discrete is a byproduct of experience. As most programmers find, the most valued resource is not someone's intelligence, but how efficiently they use their time.

    --

    Often wrong but never in doubt.
    I am Jack9.
    Everyone knows me.
  193. what to learn... by Xylene2301 · · Score: 1

    ...saying that one should 'learn' C++...or C...or Java...or whatever, is still a matter of degree. What level of expertise are we talking here? Idiomatic C++ or PERL is a big undertaking whereas going for casual familiatrity is maybe not so bad. And without knowing what one job is going to tackle, who's to say which study would be useful in the measure of time spent vs actual gain? I'd say to maybe pick an arena first before choosing the tools: desktop environment, system apps or web environment? At least then, you know which bag of tricks is likely to be most applicable.

  194. Re:PHP Is NOT a programming language..Not? (NOT!!) by Halvy · · Score: 0

    You are trying to confuse my points.

    I'm sure everyone else including the person seeking advice understands the difference between 'formating' a web page (which is all that HTML and PHP do, in their purest sense), and writing a program that can actually 'run' and 'do something'.

    Just because something has a name or cliche attatched to it, as many scriping and 'Interpreted' languages do, does not make it so.

    The issue here is to explain to the person entering this field, the various nuances that he/she may face in making a decision.

    It is NOT to argue over issues that can easily be misconstrued, as you tried to do.

    If the person we are helping is interested enough, they will investigate further to see what points are being made by any poster.

    I did not say nor mean to imply that there were no relationships between 'scripting' and actual programming.

    Scripting afterall is nothing more than taking commands that you would normally type on a command line, or 'editor', as opposed to learning an actual, bonifide 'Programming Language', which adheres to strict standards and protocals, which PHP DOES NOT.

    HTML even has it's definition in its name, ie: 'Mark Up Language'.

    Scripting, and Programming, ARE LITERALLY two different things, as I will point out in the references listed below.

    Please see the following WiKi remarks on this point, under the heading titled: CRITICISM.

    http://en.wikipedia.org/wiki/PHP

    And here:

    http://home.pacbell.net/ouster/scripting.html

    For a detailed explaination of the differences in these two computer TYPE language systems.

    G'day.


    -- Solidly entrenched in 'Bad Karma'.. now I can finally speak my mind... 10 times per day-- the new 'limit' set by the same /. management that claims we should not worry about Karma ratings :\

    --
    I will gladly loose all of life's battles.. in order to win the war..
  195. Learn Java, then C# and a little MySQL underneath by boomtrek · · Score: 1

    My advice is to learn Java first, which is what I did for 4 years. I am actually a little unique, I spent 7 years before that using VB3-6 so I'm Microsoft at heart, oh wait... I can hear the boos and roars :)

    If you learn Java, you will be able to pickup C# (ASP.NET to run on IIS 5/6 or Windows Forms, even Windows Mobile Forms for Pocket PC 2002/2003) within 6-12 months like I did, and you'll be a double threat.

    The Rules are;
    - Banks love Java.
    - Mid-size organizations ($1-5 million in sales or inventories) love Microsoft.
    - You'll score big points with both skillsets.

    MySQL database server has caught up to even the big guys DB2, Oracle, MS SQL Server in recent years and its a stable, excellent, fast enterprise solution now-a-day. The Query Browser is a nice tool to manage data, run updates and selects, export capabilities to HTML/Excel... as well, MySQL Administrator (as well as MySQL Query Browser) can be accessed over TCP/IP, I can work from remotely on any clients server, as well you can create C# distributed applications that also work great over TCP/IP with a Static IP address.

    Best of luck, its a long frusterating road to success. Never quit.

    --
    Find Stuff, Everywhere. http://www.boomtrek.com/
  196. Re:PHP Is NOT a programming language..Not? !NOT by Anonymous Coward · · Score: 0

    Interesting that your first link describes PHP as a 'programming language', and the second one doesn't mention PHP at all.

    PHP may be interpreted, but you can write complete programs in it which have nothing to do with HTML, and run them on the command line.

    PHP is a programming language at least as much as BASIC is. This isn't about "who's right" and "who's wrong," but you might want to learn something about PHP before spouting off again.

  197. .net baby by AshFan · · Score: 1

    The perfect solution to all our ills.

  198. Re:Assembly by Marxist+Hacker+42 · · Score: 1

    Well, that's ONE place to start- the processor isn't half as important as the basic concepts of what computers REALLY do behind the scenes.

    --
    SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
  199. Re:Study Pure Math??.. BUT WHY!! by 1iar_parad0x · · Score: 1

    What has happened is that the world of CS has become far removed from the world of software engineering. When I see a kid studying MIS to become a software engineer these days, I just shrug my shoulders. While you need a lot of math if you want to be a computer scientist, you're right in saying that you don't need much math to be a software engineer. I think math can sharpen your mind, but I've found that to be somewhat of a negative for the modern workforce.

    --
    What do you mean my sig is repetitive? What do you mean my sig is repetitive? What do you mean....
  200. I disagree. by jotaeleemeese · · Score: 1

    http://en.wikipedia.org/wiki/Discrete_mathematics

    I studied all those topics in the best university in Latinamerica.

    I have been gainfully employed for 15 years, working in many countries in 3 different continents.

    The solid theorethical foundations I acquired give me an understanding that people trying to learn AJAX out of context will never achieve.

    --
    IANAL but write like a drunk one.
  201. Well, if you are an Engineer. by jotaeleemeese · · Score: 1

    I studied the following topics at least on semester for an Engineering degree in UNAM:

    -Ethics (yes, a full semester of it).
    -Busniness Administration, Economics, Fundamentals of Mexican Law (which has to do with your point about conracts).
    -Administration of Computere Datcentres (where amongst other things you learn to calculate if your equipment will overheat or not).
    -Computer Networks (where we disected computer protocols).
    -Operating Systems (where we learned about file descriptors).
    -Digital Design (for the bit about assembly).

    SO while sombebody learning AJAX only may learn something and even earn a few bucks, the point has to be made that a solid education will take you much further.

    --
    IANAL but write like a drunk one.
  202. Don't start with C... by Anonymous Coward · · Score: 0

    Start with C.

    Don't. I didn't really grok good programming practise until I'd tried Modula-2 (and already been through BASIC, FORTH and a bit of C). OK, Modula-2 is an anachronism now but there must be a modern equivalent.

    Learn a high-level language first. This will allow you to concentrate on the important concepts rather than fighting with the minutae of low-level programming. Ruby looks good, but I've only spent 2-3 hours on it. Lisp is good, but I've only spent 10-20 hours on it so can't give an informed opinion.

    Learn the abstract concepts. A high level language with be less frustrating initially. Don't try something like C (or, heaven forbid, an nightmare like PERL or C++) because your confidence might be severely damaged never to return. C, because it's too fiddly for a beginner, PERL because it's the work of a deranged madman, and C++ because it's too big to learn properly and no one can agree on how to use it.

    Start simple and general and work your way up.

  203. keep the circles spinning by x00101010x · · Score: 1

    My personal experience has been fully self taught starting with BASIC when I was 12, C/C++ Turbo at 14 and then 5 years in the game industry and doing freelance development from 19 to present (25) and learning many langs/techs along the way (Lingo, ActionScript, VisBasic, assembly, Win32 API, DirectX, OpenGL, MaxScript, HTML, XML, CSS, ASP, javascript, Macromedia Object Architecture, SOAP, J2ME, BREW, SQL (Oracle and mySQL mainly), PHP, you get the idea). With all those, I felt I was spinning in dependancies as well, but I just kept pushing farther with every lap and it turns out what looks like a circle at the start is actually the base of a spring. Just keep going, google up code samples, surf forums, it'll all make sense eventually with patience and commitment.

    --
    DONT PANIC
  204. Re:Programtic structure by Idiomatick · · Score: 1

    D: i found that useless ... it's like learning the theory of fishing instead of doing it. If you think in a logical manner you can jump right into an easier language if you find a good tutorial, i really doubt the utility of learning the theory behind programming. It is a computer, it obeys your every comand perfectly, just don't screw up.