Slashdot Mirror


How Should a Non-Techie Learn Programming?

CurtMonash writes "Nontechnical people — for example marketers or small business owners — increasingly get the feeling they should know more about technology. And they're right. If you can throw up a small website or do some real number-crunching, chances are those skills will help you feed your family. But how should they get started? I started a thread with the question on DBMS2, and some consistent themes emerged, including: Learn HTML + CSS early on; Learn a bit of SQL, but you needn't make that your focus; Have your first real programming language be one of the modern ones, such as PHP or Python; MySQL is a good vehicle to learn SQL; It's a great idea to start with a project you actually want to accomplish, and that can be done by modifying a starter set of sample code (e.g., a WordPress blog); Microsoft's technology stack is an interesting alternative to some of the other technology ideas. A variety of books and websites were suggested, most notably MIT's Scratch. But, frankly, it would really help to get more suggestions for sites and books that help one get started with HTML/CSS, or with MySQL, or with PHP. And so, techie studs and studdettes, I ask you — how should a non-techie go about learning some basic technological skills?"

65 of 346 comments (clear)

  1. what problem are you try to solve? by peter303 · · Score: 3, Insightful

    Once you clarify that, then you can look at the range or software and hardware solutions, which could include some programming.

  2. The tao of programming by Radres · · Score: 5, Funny

    Give someone a program, frustrate them for a day. Teach someone to program, frustrate them for a lifetime.

    1. Re:The tao of programming by Reilaos · · Score: 2, Funny

      You're obviously not trying hard enough if you only frustrate them a single day with a program.

  3. PostgreSQL a better choice for database by Improv · · Score: 5, Insightful

    I wouldn't start with database stuff until you have a programming language or two mastered, but when you do learn one, learn PostgreSQL. MySQL's SQL flavour is messed up and because their parser doesn't handle relational calculus well, you're stuck with a language that's unusuable for much of SQL without syntactic contortions.

    I wouldn't start with web stuff either - you want a classic programming background (which will be a bit depth-first) to see if you can handle it. If you can't, you probably should find another hobby - the world is full of bad code written by people who don't know what they're doing.

    --
    For every problem, there is at least one solution that is simple, neat, and wrong.
    1. Re:PostgreSQL a better choice for database by Vahokif · · Score: 2, Insightful

      I think MySQL's language is just fine for the kind of thing non-techies want to do.

    2. Re:PostgreSQL a better choice for database by Improv · · Score: 2, Interesting

      Nah - iirc, it's opensource, meaning that if need be, MySQL's development will be reconstituted under other leadership.

      I've had the same issues with MySQL since I first had to use it, partly issues with its parser being ridiculously bad at handling relational calculus (meaning you're stuck with relational algebra if you want your queries to scale, and eventually they will), its SQL dialect being obscene (oh god why do I grant privileges to nonexistent users to make them exist?), it not handling locking well (although it has improved remarkably on this front over the years), and a few other smaller things.

      Of relational databases, I learned Oracle first - maybe this makes my preferences a bit "stuffy", but it's been very rare that I've met systems people who, given a project using MySQL, won't say that they wish they had started it with PostgreSQL, Oracle, DB/2, or one of the other choices people have. MySQL is the PHP of databases.

      --
      For every problem, there is at least one solution that is simple, neat, and wrong.
    3. Re:PostgreSQL a better choice for database by caerwyn · · Score: 2, Insightful

      It is- but *learning* sql via MySQL is a horrible idea. It allows a lot of shortcuts that are both wrong and dangerous if you're not very sure of what you're doing; learners are much better off with *any* database that's more standards-oriented.

      --
      The ringing of the division bell has begun... -PF
    4. Re:PostgreSQL a better choice for database by Vahokif · · Score: 5, Insightful

      Basic CRUD stuff is the same in any variant of SQL, and MySQL has the benefit of being available on free hosting. I think there's a time and place for advocating PostgreSQL, but this is not it.

    5. Re:PostgreSQL a better choice for database by caerwyn · · Score: 2, Insightful

      Uh, handling of nulls, empty strings, and default values are not the same as in anything else. They're also absolutely horrible practice and encouraging new users to learn them is flat out retarded.

      Also, I very pointedly didn't mention PostgreSQL. I advocated any standards-compliant DB. MySQL does not fit that bill.

      --
      The ringing of the division bell has begun... -PF
  4. In my opinion by IICV · · Score: 5, Insightful

    In my opinion, as someone who's learned a few programming languages in his lifetime, the best way to learn a programming language (or any new technique, really) is to pick a task for yourself using that technique and figure out what you need to do to get that task done. For instance, I learned Javascript primarily because I wanted to query a couple of Sharepoint sites and display the resulting information somewhere else, and Javascript was as reasonable way of doing that as any. I learned Perl because I had a bunch of information in XML files, and I wanted to apply an XSLT transformation to all of them and concatenate the result together (that's also how I started learning XLST). I learned Java Applets because I was bored in a high school computer science class, and decided to make a 2D gravity simulation thing. I learned C++ because my dad had written his own custom version of tcpreplay, and offered me $20 to port it to Windows.

    Just pick something that sounds like fun, figure out how to do it in the language of your choice, and do it.

  5. They shouldn't by jawtheshark · · Score: 3, Insightful

    No, really... They shouldn't. Programming is a way of thinking, computer science even more so and if you haven't got that way of thinking, you shouldn't touch it. I'm really sorry. My wife doesn't understand a thing I do professionally (but it brings in the bucks, so we can eat) and I tried explaining. It just isn't her world and even the basic maths behind it are beyond her. Of course, I don't understand a thing about art, which is her thing.

    This is akin to the question "I have $YOUNG_FAMILY_MEMBER who likes to game, how do I get him/her programming." You don't... Unless they show real interest it's a waste of time.

    --
    Ahhh...the great dumpster continuum. Many a free computer will be found there. -- sowth (748135)
    1. Re:They shouldn't by MikeFM · · Score: 2, Interesting

      I think it really depends if they want to learn and are capable of grasping the material. I'll agree that not everybody can learn programming, it really takes a certain way of thinking, but I wouldn't say that trying wouldn't be useful. Even for people that ultimately are not going to be able to be programmers it is good to have some understanding of what goes on. Maybe then we can stop getting clients/employers that think it's like pulling up a word processor and typing a few buttons.

      I think it was Rudy Rucker that said programming is like building a house of cards with invisible cards. There is some truth to that idea.

      --
      At what price learning? At what cost wisdom? The price is a man's peace of mind, and the cost is his life.
    2. Re:They shouldn't by mrbene · · Score: 2, Insightful

      Have to heartily agree here. I'm a techie, I understand code easily. It's natural for me.

      However, I do agree with the OP that people in not-directly-technical roles should have more confidence with technology. Whether this comes from mucking around with SQL or HTML, or from just learning that most mistakes can be undone with ctrl-z, I think that gaining confidence through doing something that they actually want to accomplish is excellent.

      For example, I gained confidence in home improvements by actually doing them - doesn't matter what, specifically. I know that I'll never use these skills to help feed my family - expecting that an amateur such as me can compete with folks who have actual training is idiotic - but I do know when to call the experts, how to call their bluffs, and when I can save myself some bucks by doing it myself.

    3. Re:They shouldn't by mysidia · · Score: 2, Insightful

      "Computer science is no more about computers than astronomy is about telescopes." --Edsger Dijkstra

      You don't have to be a computer scientist to write a program or learn programming.

      Computer programming is a vocational skill. Programming is not computer science.

      Although methods of computer programming, and algorithms are subjects of study in computer science; practitioners / engineers do not require a knowledge of CS, only knowledge of the right APIs for their environment (which implement the algorithms), common practices in the language in their industry, and the assistance of a software architect.

    4. Re:They shouldn't by TheLink · · Score: 2, Interesting

      > the way of thinking for programming and computer science are the same.

      Similar. There are a lot of differences. It's like math vs engineering. Yes engineering does involve math, but most engineers don't actually spend that much time doing math in the real world.

      A programmer could spend a fair bit of time thinking on topics like:
      0) What's the "fastest" and "OK enough" way to _write_ the code (CS on the other hand is typically more about the best way the code should do stuff).
      1) How can a hacker or user screw this up. How do I stop it?
      2) What sort of exceptions/interrupts are possible at this point and what should be done about them?
      3) Is this library portable? Is it ok to assume recent enough versions of it are available on every system, or do I bundle it (and check licensing).
      4) Should I bother making this configurable? What's a suitable default value?
      5) WTF do I name this item (variable, object, method, module, lib etc)?

      I'm sure the more experienced and good coders out there can provide more and better examples.

      And from what I see, most computer scientists hardly ever think about stuff like that. Maybe a few might descend from their ivory towers to touch on such mundane topics from time to time. ;)

      > I know computer science is way more than just programming.

      And programming is way more than computer science.

      There's overlap, but you can be a top computer scientist without being able to write a multiplayer game engine that's even half as good as the current ones on the market - easy to be licensed out to 3rd parties, performs well, great features, not ridden with security flaws etc.

      And you might be a good programmer without being able to create sorting algorithms even half as good as the current ones known. You'd probably just look for convenient and suitable preexisting library/algorithm for your purposes. After all if the product is not out of the door soon enough, there may be zero customers to enjoy the benefits of your fancy latest research sorting algo.

      Yes there's some overlap but they are two rather different fields. Then again to most people it's "Geeky/Nerdy" stuff, so depends on how far back you stand... :)

      --
  6. !Programming by StikyPad · · Score: 2, Insightful

    What you are describing is not programming; it's web design and database administration. They may contain elements of programming, and they're both (typically) done on computers, but they're generally regarded as separate skill sets these days.

  7. Re:practice by Meshach · · Score: 4, Insightful

    Agreed. The asker seems to be looking for some silver bullet there really is none. Ultimately it dies not matter what language you use or what paradigm you subscribe to. The only thing that will make you proficient is practice.

    Maybe the best option is to take an introductory programming course at a community collage and see if you like it?

    --
    "Maybe this world is another planet's hell"
    Aldous Huxley
  8. what do they want to do? by Chirs · · Score: 2, Informative

    I've been working in programming for over a decade and haven't had to deal with CSS or database work at all. The last website stuff I did from scratch was pure HTML. Arguably this isn't great from a generalization point of view, but I've got most of a decade of experience with low-level linux kernel and application coding, high performance networking, high reliability system design, etc.

    As others have said...the place to start depends totally on what they want to accomplish. I started out as a kid typing in simple games in BASIC from a magazine, then debugging them trying to find the typos when they didn't work right away. Now maybe it might make sense to create a simple iPhone app (or the equivalent for whatever other phone one may own).

  9. Re:Division of labor? by David+Greene · · Score: 2, Interesting

    This is much too limiting. Changing careers can be a wonderful thing for people. I know someone who had no technical background and went from managing developers to being a developer and it was a great change for her. She found work to be more interesting, the problems challenging and finding solutions gave her a sense of accomplishment. In other words, a career change was much more fulfilling than simply sticking with what she knew.

    And she did it around age 50.

    --

  10. Re:Why should a non-techie learn programming? by nobodylocalhost · · Score: 4, Insightful

    Small business want to save money by making websites on their own... unfortunately they don't have the know how nor the time to do it. Rather than learning to program, i would suggest learn to spot the technical BS. It is far better to pay a professional firm that does design and site programming since they are less likely to open some blatant security holes to the world. Knowing how to program does not equal knowing how to program well. When your livelihood is on the line, spending couple hundred bucks is much cheaper than having your business go under because the site you wrote over the weekend got hacked by some automated drone and all your client info were stolen.

    --
    Where is the "Ignorant" mod tag?
  11. Plethora of Options by cosm · · Score: 5, Informative

    Couple points:

    1. You have to get your mind in the 'programming' mindset. Learning programming isn't necessarily purely about being a techie. You need to have solid logic skills. Much of programming is spent just getting logic right. Check out Boolean Logic for an launch point. The knowledge you gain from briefing this area will carryover into many, many programming languages. Programming *is* logic.

    2. Learn what you want to program for. Pick a startup project. Is it a website you want to make? HTML & CSS is very different than learning C or C++, likewise, SQL is very different than assembly. Not that certain concepts don't carry over, but much of being a jack of all trades is simply having the ability to have good conditional logic skills, and the ability to Google things quickly and learn to apply them as you go. You don't have to become a master of all languages, or hell, even one language, but if you are truly *interested* (thats the keyword, if your not interested, its just not going to happen), and you have done a little programming in a couple of simple languages, then you will be in a good position to progress to more difficult projects.

    3. Learn what you want to program for. Again. Repeated point. There are hundreds of programming languages, platforms, architectures, styles, libraries, etc. Pick something you are interested in, read about it a little bit, and if it looks like the learning curve isn't too ridiculous, start there. Perhaps a simple text based JavaScript browser game. At the end of the day you will know a bit of CSS, HTML, and JavaScript if you put your mind to it. But thats just one example.

    4. W3C. This website is a good starting point for all things web.

    5. Chrome Experiments If you really like web, check out the future of browser bling. Heavy JavaScript and HTML5

    6. Databases. Not the most mentally entertaining, but you will need the knowhow to connect, select, insert, update, and delete data if you are doing anything with data. I am a Microsoft guy, and I can tell you that the Express Editions of Visual Studio are a greating starting point for a newbie, at zero price-point, and bundled with SQL Express, thats a good place to begin.

    7. Also, places like CodeProject, StackOverflow, and CodePlex are great tools for questions ranging from the most basic to the most advanced of topics, and downloading sample code and live projects for tinkering around with.

    --
    'We are trying to prove ourselves wrong as quickly as possible, because only in that way can we find progress.' RPF
  12. Re:Why should a non-techie learn programming? by Kral_Blbec · · Score: 3, Interesting

    Very good point. I contest the claim that "If you can throw up a small website or do some real number-crunching, chances are those skills will help you feed your family. " IMO its more likely to just be a black hole of time and resources.

  13. But why? by Anonymous Coward · · Score: 5, Insightful

    They shouldn't .... small business owners dont feel pressured to learn plumbing - they hire a plumber.

    1. Re:But why? by demonlapin · · Score: 2, Insightful

      Virtually every small business owner does small things themselves to save money. Not every plumbing problem needs a plumber; sometimes you just need Drano, or you just need to snake the pipe. I don't try to fix my air conditioner, or my main sewage line out of my house, but if you can't handle the P trap in your sink, you're at the mercy of anyone who wants to screw you. I'm not a mechanical engineer, but I can change my own oil. (I don't, because I hate crawling under a car and I can easily afford $30 for a car wash and oil change every 3-6 months. But I can.)

    2. Re:But why? by LodCrappo · · Score: 3, Insightful

      if the OP was asking how to learn some basic PC maintenance, save on a couple easy repair calls, maybe even set up a simple LAN, sure. but he is asking about how to do things that are well beyond the skill level of a "handy guy". if he is unable to distinguish between the "simple fix, save a buck" stuff and the "you probably suck if you haven't been doing this every day for 10 years, and maybe even then" stuff... well all the more reason to discourage him from going further.

      --
      -Lod
  14. Learn Unix by znice · · Score: 5, Insightful

    I have found that far and away the most important thing that my Computer Science program at University has required of me is that I learn Unix. Both of the scripting languages that you mention (PHP and Python) are, in a sense, descended Bash/Shell, and you will find that most of what you will be doing with them is automating procedures that could otherwise (though less practically) be accomplished via command-line utilities like cat, sed, grep, wget/cUrl, etc. The internet is essentially built up around Unix paradigms (those "/"s in URLs: the Unix directory separator, and full URL paths are generally representative of the contents of an actual subdirectory -- the web root -- on the server. I'm sure I'm telling most slashdotters something that they have known since their early teens, but the question is being asked by a beginner), so knowing how to work a Unix (or Posix) OS like any one of the major Linux distributions will be invaluable for you and, I would say, should be your starting point.

    1. Re:Learn Unix by PJ6 · · Score: 2, Insightful

      For who the author is and what he's asking, I would say that suggesting that he learn UNIX is obviously ridiculous (and I come from the same background, did the UNIX / LISP thing in college myself) and certainly not insightful.

  15. Good Lord, No. by dcollins · · Score: 2, Interesting

    "Nontechnical people — for example marketers or small business owners — increasingly get the feeling they should know more about technology. And they're right. If you can throw up a small website or do some real number-crunching, chances are those skills will help you feed your family."

    If you are running a small business, marketing, and supporting a family -- then at this point you don't remotely have the time to learn programming from the ground up. (All of HTML, CSS, SQL/MySQL, PHP/Python on a business-critical project?)

    Learning programming to that extent takes several years of alone time.

    --
    We know where leadership by an anti-intellectual "strongman" who scapegoats minorities and likes boisterous rallies goes
    1. Re:Good Lord, No. by gregrah · · Score: 2, Insightful

      We've got a vice president in my company who somewhere along the line learned to put together basic CRUD-style web UI's in PHP. A while back his department had a special requirement for a bare-bones tracking system - and since our overbooked engineering department was not able to provide him anything in the timeframe he wanted, he hacked something together himself with MySQL and PHP to get the job done.

      More recently, when a partner asks for a special report or view into our data that isn't supported in our website, he'll throw together a quick page to query our production database and display the results in a tabular format, and share that with the partner. He's got his own webapp running somewhere on our network with its own authentication and access control scheme which is completely separate from our main site and the control of our engineering and IT departments (I actually have no idea how he managed to get that hosted and accessible from outside our vpn to begin with).

      As one of the slow-moving engineers that his web app was created to circumvent, I won't even go into all of the concerns that I have with this setup. What I will say is that - all things considered - his apps actually aren't too shabby and the people who use them LOVE them for the utility they provide. And while this guy is really someone who I would consider a special case, I've also noticed a broader trend in my company on the "business" side: people who can write a SQL query and crunch some numbers tend to get promoted faster. As for this specific VP - he absolutely destroys his budgeted numbers year after year and I can't even imagine how large his bonuses must be.

      To the original poster I would say "yes, learn some 'programming' skills". As for how to do that, or what specific skills he should learn, that really depends a lot on the work you are doing. Every technical skill that I've ever really learned has been because I had some specific need for that skill. I've never had to ask what or how to learn something because almost always the answer was standing right there in front of me (usually the "what" in the form of a challenging problem and the "how" in the form of a good book or google).

      With that being said, here is the best advice I can give: the next time you need to ask a professional "techie" for help, ask yourself (or the techie) what exactly it is that the techie is doing. (Note: if the question turns out to be "build and entire web application", you probably need to think smaller scope). Then, figure out how to do that thing for yourself. Do that enough times and you, too, will have earned the title of "techie".

  16. I may sound cynical.... by brasselv · · Score: 2, Insightful

    ....but the "non-technical" person that starts with this type of mindset, I suspect, won't get too far. Learning anything complex and new requires enduring efforts and a strong will, plus a certain degree of intellectual curiosity, and a sense of purpose.

    "Let's start learning something about X", especially if X is as broad as "technology" is too generic an intention, to fit what above.

    It reminds me of man who goes at the library and says: "I have decided to get an education. Which books will get me educated?"

    --
    "Whenever people agree with me I always feel I must be wrong." (Oscar Wilde)
  17. HTML, Notepad by Bluesman · · Score: 2, Insightful

    Odds are you'll never have enough time to learn programming at the depth that someone who is very good at it knows it.

    Start small. Learn how to write a static web page using nothing but Notepad in Windows. Then, when you've mastered that, try using CSS to change the way it looks.

    At this point, you can get into Javascript, which is a fantastic language for learning. Try to make something on the web page change when you mouse over it. Experiment with changing text fields in Javascript.

    Then, write a simple "desktop" calculator as a web page.

    This will likely take you a few months or weeks if you spend a lot of time at it. Remember, use Notepad only. Don't worry about making it work in anything but Internet Explorer (or your browser of choice) because that will make you insane.

    When you can write Tetris, then you're ready to work with databases and servers.

    Don't use MySQL, it's an abomination. If you have Microsoft Access, start with that. Make a project in that that real people will use. If maintaining it becomes difficult, it's because you don't know enough database theory. Figure out on your own why you want data to be fully normalized and only flattened with many saved SELECT queries. Try to figure out how to write the queries in SQL using the (excellent) query editor. Write UNION queries.

    Now you're ready for a server and web site.

    --
    If moderation could change anything, it would be illegal.
  18. name your pleasure by epine · · Score: 2

    In watercraft, there are two sides to the tree: watercraft where buoyancy is independent of orientation (e.g. Zodiac) and watercraft where orientation is everything. In the second group, you have canoes/kayaks with great initial stability and terrible final stability, and you also have the converse. For propulsion, you have gas eating outboards, propulsion by environmental agents, and self propulsion. And you have a choice between artificial materials and natural materials.

    C is instructive if you stay close to the shoreline. LISP is a kayak. You can roll over and come up the other side. Some people like that. Python is a reasonably nimble rowboat with room for a picnic cooler. PHP is a powerboat with an onboard mini-bar in a deadhead lagoon. Java is a twin Zodiac catamaran. Never sinks in the water, but watch out for the trees. C++ is a canoe with two gun decks and side mounted chainsaws (sorry, Bjarne). Name your pleasure.

    I'm partial to the wood-canvas Chestnut Prospector, paddling solo in a sheltered bay. The one thing an amateur absolutely needs to avoid is going bow up against a cross-wind.

    1. Re:name your pleasure by gregrah · · Score: 2, Funny

      I've seen plenty of car analogies on slashdot. This is the first watercraft analogy I've ever seen. I applaud your willingness to experiment with new forms of analogy.

      That being said - I have to say that if you want readers to have any idea what you're trying to say, you would be better off sticking to cars.

  19. Re:learn the standard way by interval1066 · · Score: 5, Funny

    High School/Jr.High

                    10 PRINT "HELLO WORLD"
                    20 END

    First year in College

                      program Hello(input, output)
                        begin
                              writeln('Hello World')
                        end.

    Senior year in College

                      (defun hello
                        (print
                          (cons 'Hello (list 'World))))

    New professional

                      #include
                    void main(void)
                      {
                        char *message[] = {"Hello ", "World"};
                          int i;

                          for(i = 0; i = 0) {
          while(defined($arg=shift(@ARGV))) {
              $outfilename = $arg;
              open(FILE, ">" . $outfilename) || die "Can't write $arg: $!\n";
              print (FILE $msg);
              close(FILE) || die "Can't close $arg: $!\n";
          }
      } else {
          print ($msg);
      }
      1;

    Experienced Hacker

      #include
      #define S "Hello, World\n"
      main(){exit(printf(S) strlen(S) ? 0 : 1);}

    Seasoned Hacker

      % cc -o a.out ~/src/misc/hw/hw.c
      % a.out

    Guru Hacker

      % cat
      Hello, world.
      ^D

    New Manager

      10 PRINT "HELLO WORLD"
      20 END

    Middle Manager

      mail -s "Hello, world." bob@b12
      Bob, could you please write me a program that prints "Hello, world."?
      I need it by tomorrow.
      ^D

    Senior Manager

      % zmail jim
      I need a "Hello, world." program by this afternoon.

    Chief Executive

      % letter
      letter: Command not found.
      % mail
      To: ^X ^F ^C
      % help mail
      help: Command not found.
      % damn!
      !: Event unrecognized
      % logout

    --
    Python: 'And then suddenly you have a language which says "we're all stuck with whatever the whiniest coder wants".'
  20. mod up! by Black+Parrot · · Score: 2, Interesting

    They shouldn't .... small business owners dont feel pressured to learn plumbing - they hire a plumber.

    Best response posted so far.

    --
    Sheesh, evil *and* a jerk. -- Jade
  21. Don't box the guy in! by mcrbids · · Score: 5, Insightful

    Writing "I want to be a programmer" is like saying "I want to be a doctor!". There are a million different sub-fields, from orthopedics (EG: fixing borken bones) to orthodontics (fixing teeth) and there's a million details to know for each field.

    Programming is a big, big field and covers everything from hacking firmware in assembler to writing SQL queries to using macros in Excel. Laugh all you want to, but the lowly Excel macro quite literally runs Billion-dollar enterprises, and is legitimately a programming art, just as much as assembler or kernel coders in that it gets the job that's needed, done.

    Start with finding out what you are trying to accomplish, and then work from there! My goal was to build and sell information management tools, and for me, PHP and SQL seemed like good tools for the job. They haven't disappointed me, for my focus, but then, I'm not trying to build a 3D FPS, either!

    Then, get the right tool for the job, and roll with it.

    --
    I have no problem with your religion until you decide it's reason to deprive others of the truth.
    1. Re:Don't box the guy in! by Shadow+Wrought · · Score: 4, Insightful

      Start with finding out what you are trying to accomplish, and then work from there!

      So very true, regardless of what you're trying to learn. If it doesn't relate back to something you're already interested in you're not going to be able stick with it over the long haul.

      --
      If brevity is the soul of wit, then how does one explain Twitter?
    2. Re:Don't box the guy in! by TheVelvetFlamebait · · Score: 2, Funny

      Don't box the guy in... Writing "I want to be a programmer" is like saying "I want to be a doctor!". There are a million different sub-fields, from orthopedics (EG: fixing borken bones) to orthodontics (fixing teeth) and there's a million details to know for each field.

      So what you're saying is, don't box the guy in, even though it's really, really large box that he'll never see the sides of?

      --
      You know, there is a difference between trolling and pointing out the flaws in your reasoning. Just saying.
  22. Re:I like the PHP suggestion. by ojustgiveitup · · Score: 3, Insightful

    This seems to be the basic content of ~80% of replies in this thread. Acknowledging the danger of being accused of fanboi/hater-ism, I simply don't get what makes PHP good for beginners. All criteria you've mentioned are true for all modern web stacks. Let's take python for instance (even though I think ruby is in fact easier for beginners, it seems Slashdot is a ruby-hostile crowd) - hosting, check - well documented (disagree that PHP is but ok...), check - error messages (the fact that there even *is* a crazy hebrew one in PHP makes this laughable but ok...), check - immediate reward and feedback when you refresh a page, check - real world uses, check - natural learning curved towards better/more advanced programming, check times a bunch over PHP. It is also far more readable and consistent, does not encourage shoot-yourself-in-the-foot-isms to the extent of PHP, has generally better libraries, a very similar scalability and performance story, and equivalent if not better frameworks surrounding it. So I ask - what actually makes PHP better for beginners? Is it just because we all began our web programming in PHP so we think that's the right way, or does it actually have redeeming points? Now, Drupal and Wordpress are a couple of the most excellent and hit-the-ground-runningest of the world's myriad content management systems, so if that's what we're talking about then yes, by all means, use one of those to spin up an easily extensible site or blog very quickly and bring PHP along for the ride, but I see no reason to start from *scratch* with PHP. (Not meaning to flame, though it comes off that way - I'm very curious what you (or anyone else) believe makes PHP easy for beginners.)

  23. Re:Why should a non-techie learn programming? by sjames · · Score: 2, Insightful

    So when your car stops in the middle of a desolate no-phone zone you have some prayer of at least getting it to limp to the next town? So when the mechanic tells you your car needs a new 'connuter valve' and it will cost $500, you know to take your business elsewhere? Because the guys at the quickee-loob are always forgetting to tighten the oil filter and put the drain plug back in? So you know that when the check engine light comes on it means eventually but the oil light means right now?

    I'm not a doctor, but I know enough to know when I'd better see one and when I should just wait it out.

  24. Re:Q: How should a non-techie learn programming? by ojustgiveitup · · Score: 2, Insightful

    Hmph. This reminds me of a recent article about how the author had been scared off of Vim numerous times because people kept telling him to turn off his arrow keys, don't use "simplified" versions like GVim or MacVim, etc. No. This is wrong-headed. We don't teach people number theory right off the bat because that's what "real" mathies work in, why would we teach non-technical people C and (good lord!) Haskell just because that's what "real" techies use? These are great, useful languages, and there is plenty of time to learn them, but learn something simpler first. Scheme is a great suggestion, but you throw it in the list with the other two like they're all equally good for learning - they aren't. Scheme, Smalltalk, Python, Ruby - these are all simple languages with great depth to them with (especially the first two) wonderful teaching-oriented communities surrounding them. Agree with the sentiment that D&D tools, like how most people learn Visual Basic for instance, give a pretty skewed view of what programming is about and are not great ways to learn.

  25. Re:learn the standard way by ChrisMaple · · Score: 2, Informative

    Leaning an assembler is a good place to start, but for a beginner to learn the x86 thoroughly is a bad idea. The principles of an assembler and its relation to hardware is important, the minefield that is the x86 design is discouraging.

    Learning K&R C, which is now obsolete, is a mistake. Learn ANSI C and something of the best extensions.

    --
    Contribute to civilization: ari.aynrand.org/donate
  26. Learn to think first. by meburke · · Score: 2, Informative

    If you can't write programs better than you phrased your question you will be no good to anybody. Learn to think and write clearly.

    I suggest you start with a book similar to, "Programming Logic and Design" by Farrell http://www.powells.com/biblio?inkey=17-9781418836337-0 . This approach teaches you how to think about solving problems using computers, and you will not be stuck in any specific language. There are already too many people out there who learned a computer language and jumped to the conclusion they were programmers.

    When you do pick a language, pick a GOOD source for learning. I like the books written by Charles Petzold or the books produced by Deitel and Deitel. Pick a useful language like C/C++ if you can.

    Make a list of all the things you would like to program if you could, then start with the smaller ones and work forward. Learning to program Excel spreadsheets will teach a a LOT about regular programming, including how to relate to a database. If you are serious about database applications read Joe Celko's books; they will save you LOTS of time and save you from writing too many embarrassing apps.

    When you get so you can produce some decent programs, polish up and get some depth by learning Assembly and LISP.

    With all this as a foundation, you will have a terrific overview and some solid competency in programming. You can do whatever you want. You will have the mental skills to learn any language and do good work.

    You might wonder if you can actually learn programming by reading on your own; the answer is NO! You must program to attain the skill. I have a friend who used to be an electronic organ repairman. He saw that the future was not in his knowledge of electronics, but in swapping out cards in the organs. He took a job on an oil rig for six months and learned to program from Petzold's book on Windows Programming during his off time. Three years later he was earning over $200/hr as a contract programmer. Much of his success has to do with the high standards he sets for himself.

    Since it won't happen overnight, you might want to think about short courses offered by DeVry or a similar institution.

    Good Luck, and have fun.

    --
    "The mind works quicker than you think!"
  27. Re:learn the standard way by quercus.aeternam · · Score: 4, Informative

    And if you want the whole thing:
    http://www.gnu.org/fun/jokes/helloworld.html

  28. Seconding that with an example by dbIII · · Score: 2, Interesting

    At my company we've got a fairly good graphic designer and somebody gave her some flash tools to play with to mock up a website. The result is a intro page that would take more than fifty seconds to load at the full speed of our link to the internet. It would cost far far more in time for the graphic designer to learn to be a web page designer than it would to get someone to do it for us.

  29. Oh really? by leftie · · Score: 2, Insightful

    I disagree.

    I don't need a "mindset" to sit down and start reading.

    I just need to sit down and start reading. Once I sit down and start reading, I start learning.

    Funny how that works.

  30. Don't by sycodon · · Score: 4, Insightful

    I've been programming for 25 years.

    Here's what you'll get. You will learn language A, become proficient in it, get a job using it and then eventually get laid off.

    When you look for work, you'll find that Language A is no longer the "in thing". They want people that know language B, which was introduced 5 years ago.

    The H.R. people will want only candidates that have 7 years experience in language B.

    Then you'll learn B, but someone will come up with B#, B-, B++, B--, all basically the same thing, but with just enough differences that they can copyright it and irritate the hell out of you when trying to figure out where to put the semi-colon

    The H.R. people won't accept experience in the B(variation) that you know, only the B(variation) that they want.

    And then you'll have to deal with language bigots. You know B(variation) but not D? Well then, you are one or more of:
    a) not as productive
    b) not a "real" programmer"
    c) you write buggy code.

    Then the E bigots will dump on the D bigots while the database language "Seroquel" (many programmers know what this is are are probably taking it) bigots watch with amused expressions because they know only their language is a "real" language.

    It gets worse.

    At some point they will change the entire paradigm of application development to a new one where you have less control over how it looks, works differently depending on the user's browser preference and requires giant servers. Sure, you don't have to deal with Installers, but at the cost of submitting your program to the whims of the server, the network and the user's preference of browsers.

    Oh...and H.R. now wants:

    10+ years work experience as a Technical Lead working with the following languages, tools, and methodologies:
    * Technical lead role
    * Agile development
    * Project management
    * Implementing Microsoft technologies
    * Web architecture design and implementation
    * High volume system architecture design
    * Hardware and software load balancing technologies
    * Data replication / ETL technologies
    * Multithreading, socket programming, distributed transaction processing
    * System stress testing / performance testing framework
    * Business process / rules modeling
    * Business Intelligence tools
    Responsibilities
    * Lead technical teams in designing and prototyping technical solutions
    * Create implementation proposals
    * Review technical designs, code, test plans
    * Create well-designed, reusable objects
    * Create and execute project work plans for the technical team, revising as necessary to meet changing needs and requirements.
    * Communicate and enforce best practice coding standards.
    * Consistently deliver high-quality products and services to clients on schedule.
    * Communicate difficult/sensitive information appropriately.
    * Communicate with customers technical concepts in easy to understand language.
    * Communicate effectively with stakeholders to identify needs and evaluate alternative business solutions with project management.
    * Develop an understanding of clients' business and suggest effective programming solutions.
    Personal Attributes
    * Creativity and strong attention to detail
    * Ability to work effectively on tight deadlines as necessary
    * Effective oral and written communication skills
    * Exceptional customer service skills, including the ability to interact professionally with a diverse group of customers
    * Desire to learn new skills and improve

    Required Skills:
    * Experience as Technical Project Lead, Architect, Lead Developer or other position of major responsibility on mission critical software projects
    * C#, ASP.NET, VB.NET,C++, C, and/or JavaScript
    * Relational databases: DB2, MS SQL Server, and/or Oracle
    * Experience designing and coding superior technical solutions, creating and executing well designed and reusable objects, efficient and logical databases for clients, project work plans, revising as necessary to meet changing needs and requir

    --
    When Fascism comes to America, it will call itself Anti-Fascism, and tell you to give up your guns.
  31. Re:Don't by sycodon · · Score: 3, Informative

    Yes, that is from a for real job requirement.

    --
    When Fascism comes to America, it will call itself Anti-Fascism, and tell you to give up your guns.
  32. Re:Don't by kikito · · Score: 3, Insightful

    I can't help but notice that if you take the Microsoft-related technologies from the requirement list it starts to look adequate.

  33. Re:Why should a non-techie learn programming? by TapeCutter · · Score: 2, Informative

    C is certainly not the easiest language to learn but it will give you a very solid base that will make every other language easier to pick up. And yeah, most books are focused on boring bussiness applications but you need to remeber that it's programming you're learning, the bussiness apps are just contrived examples that are designed to touch on all of the basic programming elements.

    THE classic C book is K&R, it does not have example applications, it has examples of techniques. If you take the (non-trivial) time to understand K&R from cover to cover you will still not know how to write MIDI drivers but your skills will be such that it will be easy for you to pick it up in a couple of days.

    Note that K&R uses unix as it's example operating system but it does not teach you how to compile/link on any OS. Linux distro's usually have the compiler/linker already installed. If you want to use windows then you will need to find (and learn) an IDE, a respectable freebie is Eclipse.

    --
    And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
  34. RTF O'Riley book, beats the little padded room by Anonymous Coward · · Score: 2, Insightful

    "Pick a project and work out the language by trial and error! Whee!"

    This is the path to madness. When you're breaking your way into the tech world, starting from outside, it's easy to find yourself with a problem where you don't know enough terminology/context to write an effective google query, and no idea how to read the answers your query returns... a situation where continued effort produces vanishingly small returns. I once spent well over an hour just trying to guess what the key notation "M-x" meant on an academic linux app (having not encountered emacs). "M?" I ask you.

    It is so much simpler to start out with an O'Riley book. Many of them begin with the very basics, are mildly sarcastic, and have all the benefits of RTFM... a few chapters in you'll know little details that the trial&error folk haven't picked up in a decade of experience.

    Once you've got a grip on the basics, *then* you pick up a random project and try your luck.

  35. Re:Don't by johnlcallaway · · Score: 3, Interesting

    I've been programming for 30 years, and have never had those problems. I keep up to speed on new technology, am never afraid to pitch in even when I don't know something, and have always made sure my various bosses know that I will do whatever it takes to get the job done. I get jobs based on contacts with friends and don't send resumes to HR, I get them to the manager. I'm smart and curious, and make sure that I present those skills because anybody that is a decent manager knows that they want someone who is smart more than someone who is certified. And anyone that is any good knows they don't want to work for a manager that hires based on certifications.

    So if someone is having the problems noted above, maybe they need a different attitude. Whining never solved anything. And when I hire people, I don't want excuses, I want someone who will dig it and get the job done.

    Any decent programmer can learn a new language after they have been programing for years, it's just not that difficult. Unless someone isn't that good to begin with. Because no matter how much they tell you, basic programming really hasn't changed in 30 years. Oh sure, we use IDEs instead of card punches, and they'll talk about object oriented programming and the new paradigm, but it's really not much different than the old paradigm when you look under the covers. Computers still do things the same way they always did. Unless someone changed how binary works.

    If someone doesn't want to be a programmer .. don't start. Unless you are just curious. There is nothing worse than someone with no programming experience writing code. Not because they can't write code. But because they don't know enough about how NOT to write code and how to identify and correct syntax errors and how to debug and test. And will need to spend the next 10 years making the same stupid mistakes we have all made, but without the oversight of someone who knows how NOT to write code that will laugh and gently explain to them why myString+=anotherString sometimes is OK, but sometimes isn't. Why even though it works, sometimes there is a better way to append two strings and other things that aren't in the manual.

    --
    I rarely read replies, it's my opinion and if you thought about your opinion a little more, I'm OK with that.
  36. n/a by BaileyHankins · · Score: 2, Insightful

    Most people are far too stupid to ever program a computer, no matter what the language. For example, most people are religious and believe all kinds of ridiculous nonsense. This approach doesn't work with computers.

    1. Re:n/a by shikaisi · · Score: 2, Funny

      You've obviously never done an install of NetWare 4. As those with experience will tell you, sacrificing a black cockerel on the night of a full moon was the only way to get it up and running.

      --
      No left turn unstoned.
  37. I regularly teach programming to English majors by Dennis+G.+Jerz · · Score: 2, Insightful

    For about 10 years, I have been teaching Inform to students (mostly English majors) in courses that combine writing with media production. I start them off with HTML and CSS (just to get them familiar with the level of accuracy required of any kind of coding). I've also taught Flash, but this fall I will probably drop it to make more room for Scratch.

    The point is not to make these English majors into professional programmers, but rather to familiarize them with fundamental processes such as iteration, versioning, scaling, beta-testing. To someone who has never written a computer program, even very simple concepts such as if-then statements and variables can be completely baffling. I notice that students who play old-school text adventure games are at first very unforgiving about the limitations of the parser, but after they've programmed their own short games, and watched their beta-testers come up with reasonable vocabulary words that they expected the programmer to have implemented, students are more ready to appreciate when a text-adventure author has done a good job anticipating the user's actions. This is a lesson that, I hope, translates to their encounters with other interfaces, making them more willing to take beta-testing seriously, in the future, when they might be writing the copy for team that includes programmers.

    --
    Literacy Weblog http://jerz.setonhill.edu/weblog
  38. The MIT Way by backspaces · · Score: 2, Insightful

    Do what MIT does: teach Programming first .. via Scheme!

    Look, there is no "right way" to start. MIT presumes you need to learn about what programming is all about first. Then they teach Java, C/C++, MatLab and so on later on in engineering and science classes. They created a nifty system, Processing(.org), that takes the sting out of Java and uses it to show designers how to hack.

  39. Re:Don't by Nursie · · Score: 3, Insightful

    I've only been in the programming game for a decade but I don't suffer from that. Why?

    I never did program in anything fashionable or new. The language I use for 99% of the serious stuff is C, there are always loads of jobs in it for someone with a few years experience, and it was designed in the late 60s/early 70s so it seems to me it's unlikely to just up and die any time soon.

    I'm not trying to get into a 'which language is best' flamewar here, but from a career perspective I've done very nicely out of it. I do learn bits and pieces of other stuff as needed, but having C as a base ensures I'm never out of date (or perhaps I'm always out of date :)

  40. Re:I like the PHP suggestion. by julesh · · Score: 2, Informative

    error messages (the fact that there even *is* a crazy hebrew one in PHP makes this laughable but ok...), check

    I should explain this for anyone who is perplexed as to why PHP has an error message in hebrew: it doesn't. The name used by the parser to refer to one of its operators ("::") is taken from hebrew ("Paamayim Nekudotayim", meaning "double colon"). This is what happens when your parser is developed by Israelis. The error message is, however, in english, only the operator name is not.

  41. Re:Don't by 1s44c · · Score: 2, Interesting

    So, the best thing you can do is stay out of it and pay us lunatics that are dumb enough to go through all this crap.

    Keeping up with the latest trendy languages is a path to burn-out. Find another path.

    This flitting from thing to thing isn't right. It's like a heart surgeon changing to a ear, nose, and throat specialist, a radiographer, then a dentist, within 10 years.

  42. Re:practice by CastrTroy · · Score: 2, Insightful

    At this point I really wouldn't say you were a programming, any more than someone using functions in Excel is a programmer. Learning just enough HTML to get by and modify someone else's template is surely a deathtrap. Soon you will change something, and it will completely mess up everything, and you'll have no idea how to fix it. Or you'll do something the "wrong way" and it will screw you over in 3 weeks.

    My opinion is that you should learn programming first, basic command line stuff. Then move on to the GUI. After that you can learn how to manipulate databases. After that, you should move to the web.

    --

    Anthropic principle: We see the universe the way it is because if it were different we would not be here to see it.
  43. Re:Don't by crow_t_robot · · Score: 2, Informative

    This made my morning. I agree wholeheartedly with this post and I recommend to people to start with fundamentals of computing/programming concepts so they can easily slip between languages if they choose to go this route.

    http://mitpress.mit.edu/sicp/
    The book linked above is a great start if you are serious. Don't half-ass the learning process. It is going to suck in the beginning and your brain will hurt (just like doing most new things in life) just stick with it and persevere.

  44. Scott Adams' take on it by iMadeGhostzilla · · Score: 2, Funny

    ... when Tina the Tech Writer wants to get better pay and tells Alice, "Alice, teach me how to be an engineer. I don't care if it takes all day." And then adds greedily (as Alice is gritting her teeth), "but let's keep quiet about this. I don't want others to get in on this scam."

  45. How to Think like a Computer Scientist by Kwesadilo · · Score: 2

    If you've never programmed before, then you will likely need to practice thinking in a logical, structured manner. Certainly, you should learn your first programming language while doing this, rather than take any kind of math/logic course. Unless, that is, you really like that sort of thing. Posters above me have suggested starting a project that you are motivated to complete, finding out what language is most suited to your goal, and learning it as you go. This can work, but you may hit a few road blocks:

    1. When you aren't that familiar with programming, it is hard to know which language is the right one to use. If you have perfectionist tendencies like me, this problem could completely halt your efforts to learn programming. Note: avoid such behavior. For really basic stuff, most languages will be serviceable, but you might get along faster if you use one considered appropriate to your attempted task, simply because more experienced people will know how to fix the problems your run into.
    2. If you aren't particularly creative, also like me, you may not have any projects in your head just waiting for the right programming language. I find it nice when I'm learning a new language without a project in mind to have assignments with clearly defined goals and reference solutions with explanations.
    3. If you learn your first language as need dictates, you may end up doing things the hard way because you didn't know that better options were available. A guided tour of the language features is helpful to prevent some of this. This is also where the new way of thinking comes in. As you learn logic and math (while learning programming, as suggested), you will probably learn some pretty basic algorithms for doing common things, and knowing one half-decent way of doing something will keep you from sticking with some horrible way of doing it because you can't think of anything else

    To get around all of these potentials problems, I recommend the book Python for Software Design: How to Think like a Computer Scientist , which I used when I first learned to program, back when it had a different title. It is available for free here, under yet another title. It's positive attributes are that it uses Python, contains short problems at the end of each chapter (many with solutions and explanations), and explains various things about math, logic, and algorithms as it goes along. Python is a good first language because it doesn't get into details of hardware, it is interpreted rather than compiled (quicker feedback when you change something), and it has clear, simple syntax that enforces good style. If Python doesn't suit you for whatever reason, I would recommend that you seek out a book that professes to teach you how to think as well as how to program.

    I have been assuming that you intended to self-teach, but an introductory computer science course at community college should also work. The quality of your education will depend upon your instructor, but that's not much different than picking up a book and hoping the author knows what he's talking about. I think Allen Downey does a good job, but that's just me.

    If you do one of these things, learn a language, and it piques your interest, learning other languages is a good time to find a project you're interested in and learn the appropriate language as you go, already having the proper mindset and background under your belt.

    --
    This space reserved for administrative use.
  46. Your career path expectations need calibration by itomato · · Score: 2, Interesting

    You're an artisan. As an artisan, you apprentice under a specialty with a short life, but exceedingly high payoff, which is it's own reward.

    Increased tenure does not imply increased capability, unlike typical 'Professions', i.e., Plumber, Mechanic, Lawyer, Professor, Accountant, TV Producer..
    Like the brick layer, you are a means to an end. A potentially cushy end, but an end nonetheless.

  47. Game Maker by Purity+Of+Essence · · Score: 2, Informative

    I'll probably be vilified for this, but if you are using Windows (or Mac), try Game Maker (Mac version is beta). It's a good introduction to a lot of programming concepts using a construction set like metaphor. After you learn the basics, it's easy to move to just code. Game Maker is free, many schools use it, and it was developed by university professor as a teaching aid.

    http://www.yoyogames.com/make

    Read the manual, do the tutorials, work your way up to GML code, take your questions to the GMC forums. Once you learn GML (which is similar to C and PHP, but allows Pascal style code as well), you'll be able to pick up other languages easily. Most programming languages are very similar.

    There is also a book, The Game Maker's Apprentice, if you feel the need to purchase something.

    http://book.gamemaker.nl/

    --
    +0 Meh