6 ms·
Most programmers my age (I'm 37) started with BASIC. We should all be terrible if the language you start with would be so fundamental. The only thing that matte
by antirez 12y ago
Most programmers my age (I'm 37) started with BASIC. We should all be terrible if the language you start with would be so fundamental. The only thing that matters is actually to start with something, and to improve over time.
- oneeyedpigeon 12y agoI think we (I'm 36) should also bear in mind that we'd probably be better programmers if we were starting out today. HTML + CSS + JS + PHP is worlds ahead of the rubbish we were using!
- georgemcbay 12y agoAs someone who learned MS BASIC 2.0 -> 6510/6502 assembler -> Pascal -> C -> etc, I know we'd be more immediately productive, but would we necessarily be "better"? I run into a fair amount of programmers these days who never worked with a non-garbage collected language, have never even seen an assembly language listing (let alone written code in assembly), etc who are generally productive but end up being really lost whenever whatever leaky abstraction their language/framework/etc is using inevitably breaks in some way and in this situation if the solution to their problem isn't immediately Google/StackOverflowable they are standing in front of a brick wall because they've never worked in a language or environment that wasn't abstractions upon abstractions over how computers actually work at a fundamental level. I'm sure there is some amount of get-off-my-lawnism going on here and I know it isn't universal (there are still young kids writing real bare metal bit-banging code, especially in the maker/"IoT" space), but I think that while highly programmer-time-productive languages and frameworks are great we're still at a point where those skipping over the fundamentals the technology is built on do so at their own peril in terms of how effective they can be when things don't go as planned (and in software things rarely go as planned).
- notduncansmith 12y ago> writing real bare metal bit-banging code Well, there are plenty of microcontrollers running on Javascript/Ruby/etc, so if people are still writing "real" code, it won't be for long.
- georgemcbay 12y agoJust to clarify, the "real" I used was a qualifier for the bare metal code description. I'm not suggesting JS/Ruby/whatever code isn't "real" code, but it is pretty common to see people talk about some JS/Ruby/etc code being "bare metal", totally abusing the classic meaning of the term. Examples (just a couple out of many dozens I've seen over the past few years): http://video.kiberpipa.org/jsmeet_slavic_performance_optimizing/ http://video.kiberpipa.org/jsmeet_slavic_performance_optimiz... http://www.hyperscala.org/ http://www.hyperscala.org/ Efficient JavaScript is great! But it isn't bare metal programming. Also people will be writing low-level C/asm code on small devices for quite a long time yet. While it is great that you can get small "IoT"-style devices with the power to run a JavaScript interpreter, such SoCs are still really expensive by "chip whose cost must be factored into every device manufactured" standards.
- Retra 12y agoComputers are themselves abstractions upon abstractions. How many levels of cache does a modern computer have? How many memory protection layers exist between your code and the machine? Hardware keeps getting more complex and it becomes obsolete quickly. It's hard to teach this stuff to beginners because it will probably be useless by the time the get good enough at programming to do anything. Add to that the fact that there are probably 15,000 different platforms all doing the same things in subtly different ways . PS: 'subtly' is a horrible word.
- ams6110 12y agoNo I don't agree. HTML + CSS + JS + PHP (and also probably + SQL) is a lot of layers and languages to get your head around as a beginner. A single simple environment (e.g. Python or even BASIC in a REPL) is going to be a lot easier to focus on.
- reitanqild 12y agoNo, I don't agree, I never managed to "study" programming using an editor and a compiler. I always had to have a reason. I read, poked away, tested, got burned, read, poked etc. That kept me focusing. And, I learned it and mostly got better grades than the "student" types as well. (B.Sc Computer Systems). Generally it seems for some of us it is easier to focus once things make sense and has a purpose. "Studying" seems to be for people with infinte lifespans and neverending funding, I never had any of those and I guess it affects my learning style ;-)
- goalieca 12y ago30 and started with QBasic. Yeah yeah... i heard it was terrible at the time but i didn't have internet to get a real compiler or language. Had a lot of fun though. nothing anyone told me could stop me. Also, if i wanted to make windows programs, Win32 was an impossible beast to me. I, to this day, still have no idea how that mystical beast works even though I've coded a few programs in it. Some of these "frameworks" can be a little code heavy and have lots of technical details (MVVM and WPF come to mind) They are completely overwhelming while php and basic are simple and have little magic. That said, if i were to have a child soon, I would teach her racket using SICP.
- kiyoto 12y ago>Just let them first learn something (anything!!!) to get hooked onto the potential of programming, and then you can offer to show them the true light later. pgbovine nailed it. I learned this lesson from mathematics (I studied math in college and theoretical CS in grad school): the best math teachers always introduced a new concept/idea using a "toy" example. A toy example may not have the full generality of the overarching theory/idea, but it has all the essence without any of the abstract inaccessibility. I try to apply the same lesson when I teach people data analysis: I learned (through my time as a quant on Wall Street) that a lot of people feel very comfortable in Excel but find other data analysis tools (SQL/R/Python) too abstract/scary. So, instead of telling them "Oh, you should use Pandas with Postgresql" or "that stuff can be done better using R", I show them what the equivalent operation looks like in Excel first, then show them how they can be done in SQL/R/Python (See, for example, this: http://blog.treasuredata.com/2014/12/05/learn-sql-by-calculating-customer-lifetime-value-part-1/ http://blog.treasuredata.com/2014/12/05/learn-sql-by-calcula...)
- hoprocker 12y agoJohn Foreman's book _Data Smart_ follows the Excel-first methodology, and I've been appreciating how well this separates the data analysis from the toolset choice.
- kiyoto 12y agoYea, I am a big fan of that book. I tend to think of it as a well-executed troll against the fad-driven, toolchain-crazed "data scientist" communities.
- nkozyra 12y agoVisual Basic 3 for me (although I did a bunch of BASIC on commodore64 in the early 80s). There weren't that many high/entry-level languages back then, though. The argument that BASIC is terrible notwithstanding, it was often either that or a very low-level language.
- GeneralMayhem 12y agoHell, I'm 22, and the first few years of my programming life were with TI-BASIC.
- colanderman 12y agoTI-BASIC, as in TI-99/4A? How many times did you lose your work due to a fat-fingered FCTN-= instead of SHIFT-=? At least that prepared 6 year old me for the adult world of "rm -rf . *".
- cozuya 12y agoI made a blackjack program on my TI-85 (with real arrays of suits!) that took 5 minutes to compile...
- SAI_Peregrinus 12y agoProbably TI-89 or TI-83+ graphing calculator BASIC, given his age.
- ams6110 12y agoYou never know. I finally took my 99/4A to the recyclers just a few years ago. Had had it since new in high school, and it still worked.
- ams6110 12y agoIIRC if you had the Extended BASIC cartridge you could poke a value in a certain address and disable the FCTN-= action (which was an immediate reset of the computer, losing any unsaved work).
- GeneralMayhem 12y agoTI-83+ for me; the TI-99 is a decade older than I am.
- alxndr 12y ago30 years old here, started off with TI-BASIC on a TI-83 that I beat the crap out of.
- analog31 12y agoI'm 50, and started with BASIC on a mainframe timeshare system. The following Dijkstra quote is proudly displayed on my cube wall: "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration." I would actually go a step further with the thread title: Please don't try to teach if you can't. When I talk to junior (or senior) folks who are learning to program, it will become evident that I've chosen different tools than what they're learning. So the discussion of tool choice is inevitable, especially if I have to admit that I don't know the language they're learning. My typical advice is to choose something that is presented with good learning tools, and maybe one that has tutorials related to a subject matter that they're interested in.
- drcomputer 12y agoI was about to quote this quote, but I have a different opinion here. > I would actually go a step further with the thread title: Please don't try to teach if you can't. The line between teaching a truth and teaching a self-enforcing belief pattern has not been drawn, and I don't know if it ever will be. You can be an amazing teacher and not even know it (by making horrible mistakes that other people learn from by observation, comparison, abstraction, and analysis). Or you can be a really amazing teacher and never admit it. > My typical advice is to choose something that is presented with good learning tools, and maybe one that has tutorials related to a subject matter that they're interested in. That's good advice.
- analog31 12y ago>>>>> The line between teaching a truth and teaching a self-enforcing belief pattern has not been drawn, and I don't know if it ever will be. You can be an amazing teacher and not even know it (by making horrible mistakes that other people learn from by observation, comparison, abstraction, and analysis). Or you can be a really amazing teacher and never admit it. Great points. Thanks.
- enlightenedfool 12y agoAfter 14 years of java programming which was really the language I started with, I can say that quote applies to java and perhaps any language that's not assembly, C, C++. I think every beginner should be strongly encouraged to start with C.
- LnxPrgr3 12y agoI've never met a language that isn't broken in some way. They're tools—my only real advice to beginners is to branch out once you get a handle on your first language. My first language was MBASIC on a Kaypro 2, because that's the toy my family had to play with. When I branched out (from QBASIC), I first found assembly—first, for the 8085/Z80, because the public library where I grew up sucks at life. Thankfully, the Internet happened, and I found information about x86 assembly—but better than that, I finally got my hands on more than one C compiler. Then, I discovered Linux and found Perl and Python. Somewhere in this timeline I also found Java, which turned out to be a great way to bring a 486 to its knees. I'm glad I took this drunkard path through programming. First, I learned how my machines actually work. More importantly, I learned all languages are made of trade-offs. C++ is nowhere near perfect, but it lets me get work done at the level of abstraction I choose, which turns out to be a win for the things I do. But it's definitely not for everyone or every project. Most importantly, I got a gentle exposure to programming, followed by a series of challenges that taught me without demoralizing me, allowing me to build myself up to the point where C++ seems like a relatively tame beast. Edit: One of my favorite books ever (http://www.dspguide.com http://www.dspguide.com) presents code in BASIC as a least-common-demonimator language. Even a limited tool like BASIC can do amazing things.
- rancur 12y agowhat??? my language isn't broken!!!
- elijahparker 12y agoI'm 32 and started with QBasic in DOS in 1994. After creating a program that reached 1000 lines of code (which I considered enormous at that time) I started to feel the limitations of the language. I then got a hold of a compiler for basic which sped things up a bit but went on to teach myself C. I was blown away by the improvement in speed! After the equivalent of "hello world", I created a minimal basic interpreter as my first C project which taught me a lot about the differences as well as a wide range of tasks in C that had little external dependencies (didn't have to deal with drivers or graphics). While the patterns I learned in BASIC weren't ideal, it was enough to give me the love of programming and and a lot to appreciate about the power of C. Then I got into web dev and was writing CGIs in C/C++ (even to the extent of generating jpeg charts from dynamic data). When I later discovered PHP I was ecstatic that I didn't have to recompile every time and db interfaces were so easy! It's all been a fun learning journey. I now also work with Rail and Node.js and embedded C/C++, and no, I no longer use SSI or CGIs, most definitely not in C!