So, I have a forgotten year of C++ under my belt and I can work with HTML and CSS. What exactly goes into web programming? I was imagining it’d be a few months studying CSS, Javascript, jQuery, Python, MySQL, PHP, Django, that Google Apps language, et cetera, and it just sounded like a lot of work. Also, I’ve had 2 occasions where I spent a few hours looking for resources to help with a problem and I just had to give up, which is hella frustrating. I couldn’t get processing.js to work which sucked ’cuz I’d written up this cool thing in Processing and figured it’d be really easy to work into a website I’d designed, and I felt stupid, and I don’t like feeling stupid. I mean if I’m chilling with SIAI folk then I guess I might as well take advantage of their knowledge and pick up some web programming (especially since it’s really just fun in the first place), but… I dunno, it feels like there’s this big unknown gap between me and being a below-average web programmer, and I don’t like being below-average at anything, let alone having to work hard to become below-average. Hence I also avoid learning math, even though I know I really should learn more.
It really depends on what someone needs you to do. There are a few different approaches to web programming, which include different workflows and different ways of breaking up who does what. Generally, most things on the web can be broken up into “front end” and “back end”, which change meaning based on context. “Front end” can usually be divided into “design” and “implementation [or] programming”. “Back end” can usually be divided into server administration, the database, and programming.
I work at a small firm (in person) and so do both front-end and back-end programming, but usually someone will specialize in one or the other or some aspect of it. For folks condemned to work in the world of Microsoft, there is usually a lot of complicated technical work to interface various proprietary Microsoft technologies using abstract frameworks on the back end.
The traditional back-end setup in the Unix world is what used to be called LAMP (back when people felt the need to call it something) - a machine with a Linux OS running the Apache web server and MySQL database engine, with Perl (/PHP/etc) serving up dynamic pages.
On the front end, you basically have a web page crafted using HTML (usually served via some complicated method from the back end) as well as whatever the user-agent is going to let you get away with. In practice, depending on the application, you will use HTML for the page’s semantic structure, CSS for style and layout of the HTML, and Javascript for dynamic content on the front end, often employing a library like JQuery to abstract away browser quirks or JQuery-ui to add user-interface functionality. Plugins like Flash might also be used to create dynamic content with a more consistent user experience.
It’s really impossible to prepare ahead of time for whatever web development job someone might need done, and there are gurus who are experts at any particular one of the technologies above, so it’s a little tricky to set out trying to find a niche to fit yourself into. I can do anything we randomly decide to get involved in at my job, but I still don’t fit the bill for a lot of the job postings out there because I have no reason to study the technologies used on Microsoft servers, and I hardly ever use Flash since Javascript is actually almost as useful these days, and we’ve never seen a reason to work seriously with Ruby or Python since they do so miserably in benchmarks against our old standby Perl (or C if we really need performance) and we’re not popping out unique web apps on a daily basis that would need a complicated framework (like Ruby on Rails) to abstract away a lot of the work at the expense of performance.
The real trick is staying good at web development. Aside from graphics and games, the web is the main computing frontier where things are constantly changing and improving so constant study and practice is needed to stay ahead of the curve.
I’m pretty confused about back end programming. I figured it was possible to just let other people handle that for you, like Heroku or some other hosting service where you don’t have to worry… but I’m totally in over my head here, is that not how that works? I guess if I got into web programming I’d want to focus as much as possible on the front end, designing things and trying to worry as little as possible about optimizing data structures and the like.
Back end programming just means the programming of what you want your site to actually do, as opposed to how you want it to look. i.e. it’s the part that actually qualifies as “programming” (coders really hate it when web designers refer to web design as “programming”).
If you’re just setting up a web site based on an existing code base (like how LW is based on the reddit code), then there may not be any back end programming that needs to be done. But if you’re actually creating something original, somebody needs to actually write the code to make it do what you want it to do.
Like say we were trying to create LW from scratch. You’ve laid out all your HTML and CSS and images and whatnot for how you want everything to LOOK. But there are all these buttons and stuff, like the “Create New Article” button in the top right. You can lay out where that button is and what it looks like, but what actually happens when a user clicks on it? That’s where back end programming comes in—probably you respond to the click by creating a new row in an article table in your database, which has a schema you’ve created, specifying all the fields that need to appear—the article content, the article author, timestamp, maybe the article karma would get stored there too. Then it generates from that a stub article which it passes back to the frontend which then decorates it and renders it for the user.
And then of course there would have to be code written to handle commenting and the karma system. Those would probably be stored in their own db tables with their own schemas you’ve designed, and you’d have to write the code that takes a user action, like clicking “comment’ or “vote up” and actually doing something with that, incrementing the comment’s karma count by one and storing that back to the database.....
...thats’s back end programming. And as you can see, its definitely not something a hosting provider could just do for you, cause it’s very specific to your site and what exactly you want your site to do.
Sorry for being rambly and incoherent.… i took an ambien about a half hour ago and am in that ambien half asleep/half awake/half stoned state
Hmuh, this is intimidating. I was gonna pick up some PHP but to actually use it for a project I’ll need MySQL and for that I’ll need to set up an Apache web server of some kind… which is intimidating, and I’m probably approaching this the wrong way, especially as I’m not sure yet what I’d even be scripting for. Also I feel alienated as a Windows user; I have Ubuntu but it’s frickin’ annoying sometimes. How do most people get started with this whole hacker thing?
EDIT: Eff it, I’ll switch to Linux and play with Django, it seems easiest. Stupid Linux.
There is essentially no reason to bother with PHP these days. It’s a relic and you’d end up having to learn all sorts of arbitrary distracting things.
I can empathise with the intimidation. There was a whole heap of linux administration stuff that I had to pick up to get started. Fortunately, you don’t need to do anything like that any more and it can be even easier on windows! You can install the whole stack (ie. Ruby, Rails, apache and mysql) all at once. From there you can just find a tutorial to follow then start copy and pasting stuff from similar applications till you have one that does what you want. (You didn’t hear ‘develop by cut and paste and google’ from me! ;))
RubyStack is one option. The one I have used is InstantRails. I think that one is getting out of date (about a year old) but it probably doesn’t make any difference for your purposes.
I don’t know what the options are for other web development frameworks. I’m sure there is something simple out there for Python somewhere but I just haven’t had reason to look into it.
So if you wanted to get started it is easy enough. Depends on your interest.
How do most people get started with this whole hacker thing?
When I have something I want to do I go do it. Sometimes that means learning stuff like programming. Sometimes it means learning pharmacology. That’s probably the underlying spirit behind the ‘hacker’ mindset.
Thanks! Ruby looks good, but I know more Python/Django folk, so it’s tempting to leave Windows for a bit. I guess I’ll start with the RubyStack and see what I can build. I’m guessing a lot of the basic skills I need are transferable to Django development anyway.
I’m a rails developer myself and i shudder to think of developing in Windows. It really is pretty simple in Ubuntu, just open Synaptic and download anything that says ruby.
If you want to go with heroku you don’t even need apache.
I wonder if there is a “DjangoStack” for windows about someplace. Maybe your friends would know? Not that I’m saying linux is bad, just that you’ve already got enough stuff to be absorbing without cramming in two languages and frameworks at once. (But you are right, the fundamental concepts are the same.)
I downloaded RubyStack and the install process doesn’t do anything; not sure why. It flashes a BitNami logo and then goes blank, but the process is still sitting there in my task manager… maybe it doesn’t play nice with 64 bit Windows 7. At any rate BitNami also has a DjangoStack! So I’ll try that instead. :/
I downloaded RubyStack and the install process doesn’t do anything; not sure why. It flashes a BitNami logo and then goes blank, but the process is still sitting there in my task manager… maybe it doesn’t play nice with 64 bit Windows 7. At any rate BitNami also has a DjangoStack! So I’ll try that instead. :/
...and that also didn’t work, so it looks like Ubuntu for me, where my problems will be even greater. I hate computers.
So the good news is, you need none of these “stacks”. Really. What you’re trying to do here is run before you’ve learned to walk.
Web programming is as simple as writing a program that does
puts "<html>Hello World</html>"
and redirecting the output to “index.html” when you run this from shell. This gets you a dynamic Web site generated from a program that you wrote.
If that’s too simple for you, congratulations: you’ve mastered enough of the fundamentals to get on to the next step. Something like parametrize the Web page to greet you by your name.
You may be protesting at this point that running the program whenever you want to update the Web site wasn’t your idea of “Web programming”—you want a Web site that updates on the fly.
Now we’re talking about Web frameworks. But still you don’t need a “stack”, you need to build up an understanding of how Web servers work, and maybe study a few architectures of historical interest:
CGI (the way Web programming was done for years, basically a hack to get the “invoke program from command line and redirect output to a Web connection” idea to work on-the-fly)
PHP as an Apache module, or what happened when the Web server coders realized the hacks weren’t going away anytime soon
frameworks like Sinatra, a gentle introduction to Web frameworks in a modern language without excessive baggage
With something like PHP or (if you lean toward Ruby) Sinatra, you’re reaching the point of building up arbitrarily complex Web pages in response to HTTP requests, on the fly. At this point you’d better have a solid understanding of how the dance unfolds between Web clients (typically browsers, but not just) and Web servers. What are requests and responses, headers, parameters.
Rewrite your Hello World example in Sinatra. The next exercise is to orchestrate a simple interaction where your Web app displays a form with a text box asking for your name, and a Submit button which takes you to a page greeting you by name. Just this little loop requires you to stay on top of a surprisingly large number of abstractions spanning several layers.
Note that at this point you still don’t need a database, knowledge of CSS is superfluous, and client-side scripting very much not even on the agenda. Discussion of design patterns like MVC should be deferred until you have experienced for yourself the issues that these patterns are supposed to solve. (That way, you can judge for yourself to what extent the big frameworks like Rails actually solve the issues. Affective Death Spirals are just as deadly in programming as in the rest of your intellectual development.)
When you feel comfortable with this kind of program (check that by writing a more complex one like a calculator or a tic-tac-toe game), you can move on to one that handles arbitrarily large sets of data. By now if you feel like tackling MySQL, go ahead and do that, but you could also focus on your learning programming (as opposed to learning technology). Get your data from a text file, maybe YAML which is like XML, only much more friendly.
Anyway, that’s the kind of learning that works for me: instead of getting in way over my head, I try to cut it down into chunks that I can master one at a time.
Get your data from a text file, maybe YAML which is like XML, only much more friendly.
I’m confused, you’re talking about data for a tic-tac-toe game, which should be stored in YAML? I got a tad confused because YAML sounds like HAML and I’d just been reading about HAML, then I realized I’d never used XML and didn’t even realize what it was for, so I tried to see if it was related to HTML which I’ve used a lot of, but it looks like it’s not, it’s just a way to format text files so that programs/scripts can import data from them. HAML on the other hand is a prettier version of ERB which is a way/template to use Ruby to make HTML use variables. So HAML is this thing I shouldn’t be using yet because it’s complicated and I should be focusing on Sinatra/Ruby whereas YAML I should start using eventually because it’s a way to format data for easy interpretation by ruby scripts and the like. Or did you mean YAML should be used for other things? Am I totally off?
No, something like tic-tac-toe has a bounded set of data to keep track of, no database or other long-term storage required.
Once you’ve mastered tic-tac-toe or the like the next kind of Web app you’re likely to tackle is one with an unbounded data set: for instance, a list of user accounts, or a list of posts and comments. Data like this should survive shutting down and restarting your server.
The traditional approach is to use MySQL to store this kind of data, but I would advise against getting a premature interest in MySQL, as there’s a risk that doing so will warp your thinking. YAML is an alternative for storing such data that would keep you more in the Ruby world.
All four of HTML, XML, YAML and HAML share the two initials ML—they’re all “markup languages”. It’s easy to get confused because the differences between them are minute, in the grand scheme of things, and only relevant to people who care so deeply about what tools they work with that it magnifies the differences.
The one you can’t do without is HTML, so it makes sense to use only that for a little while. (Actually in the past few years HTML has been redefined as a dialect of XML, so using it means you’ll also be using XML.)
Using HAML makes a lot of sense, but there’s also a bias it (and ERB, and every similar templating language) induces that you want to be aware of. When you start using these things you start thinking of your generated Web pages as “documents with Ruby variables”.
This is fine for some class of features but it will wreck your design skill if you generalize the approach too eagerly. Some (indeed many) portions of a significant Web app should be thought of as Ruby objects with the ability to output a HTML representation of them. Things like row/column tables; menus; data entry forms; recursively nested structures like LW comment threads; and so on.
I think I’m limited to just playing around with Ruby on Windows for now; my wireless card doesn’t work in Linux. And the thing that might work to fix that is in a package that I need the internet to download. I hate Linux so much, it’s seriously a horrible operating system. GRUB actually knocked out access to all of my partitions once, meaning I couldn’t even get to GRUB and therefore Windows 7; there’s no way I would’ve been able to fix that without SIAI folk. I’m also running it in VMWare and the internet works there but Gems doesn’t: the paths are messed up somehow so that gems don’t run, and the internet isn’t helpful in fixing that. Stupid stupid operating system. No wonder everyone owns a Mac.
Yeah, I was interested in familiarizing myself with Sinatra but without gems working I guess I’ll… uh… play with Python/Ruby and see which I like more until I can afford a Macbook? I feel like it’s a little ridiculous that web programming is so limited on Windows. I must be missing something?
For some reason the whole Web thing had historically much more traction in Unix family OSes. Windows has to do extra work to make it look to the server programs as if they’re running on something Unix-like. Like making its non-Unix paths make sense to programs that are mostly coded with Unix in mind.
So what kind of error messages are you getting when you run gem commands?
″ installing to ~./gem /var/lib/gems/1.8 and /var/lib/gems/1.8/bin aren’t both writeable ” and since /var/lib/gems/1.8/bin isn’t in my PATH gem executables won’t run.
I tried doing what it says here to no avail; it did nothing as far as I can tell. I’m not sure if this is a VM problem or an Ubuntu problem.
We’d need to go to a real-time convo to get anywhere with this, I think. I’m about to have dinner now but I can swing by the LW IRC channel later if that suits you, PM me in that case.
I got gems and therefore Sinatra working. :) I also think I got Rails 3 working but I haven’t tried messing with it yet… Everything seems really spotty; the ‘heroku’ command worked but then it stopped existing so I reinstalled it… Did I just install it in two different places or something? Or did I need to ‘load’ it somehow? This all seems kind of magical in a bad way. Oh well. I’ll take your advice and stick to Sinatra for now. Thanks!
I am not a web developer, but as a Linux user of 15 years let me explain why it might not be as bad as you think.
Get any old computer and put Linux, Apache, MySQL on it. (Those softwares require very little in the way of hardware resources unless you are serving 100s or simultaneous users.) Network the Linux machine with your Windows machine. Even better if your Windows machine has enough memory, run Linux on a virtual machine on Windows. I do not know what the cool kids are using these days in the way of virtualization software, but VMWare would work.
Use a web browser on Windows to test your web app of course.
Editing of text files (mostly config file for Apache, etc) on the Linux box or Linux virtual machine can probably be done using whatever text editor you already use on Windows though I do not know the details of how to set that up in any editor other than Emacs. (For Emacs I would probably use the FTP protocol. The SMB and NFS protocols are alternatives.)
True, you will probably need to interact with a shell on the Linux box or the Linux virtual machine occasionally (using something like PuTTY on Windows), but this way saves you the trouble of having to learn anything about Linux’s graphical user interfaces. The good thing about the shell is that it lends itself very well to textual tutorials, with the result that there are 10s of 1000s of blog posts and web pages describing in exact detail how to do stuff in the shell. I would be happy to answer questions by email about the shell, but I do not know about Apache or MySQL.
This way of working with Linux—by establishing connections to it with browsers, text editors, FTP clients and ssh clients like PuTTY on Windows is very common.
Everything I have described is the worst-case scenario. You can probably either install Apache, MySQL, etc on Windows like wedrifid says or avail yourself of some online service that will host the software for you and allow you to configure and administer it using a web interface.
I’m pretty confused about back end programming. I figured it was possible to just let other people handle that for you, like Heroku or some other hosting service where you don’t have to worry… but I’m totally in over my head here, is that not how that works?
A good question. Yes, for ‘server administration’. But things like the database and core project logic are obviously handled by the developer.
(See Kodos for more details of what that entails.)
For folks condemned to work in the world of Microsoft, there is usually a lot of complicated technical work to interface various proprietary Microsoft technologies using abstract frameworks on the back end.
What Microsoft is actually good at is linking front and back end. People can pretty much take the mouse, pull an SQL table on a website and have all the CRUD generated for them and it works. The open source / linux world with its strong focus on the separation of concerns and modular architecture is very good for the kind of projects where you want to build with scalability in mind and you don’t mind not getting immediate results.
Microsoft (ASP.NET and many other products) is for a different philosophy or situation. For example you work at a business where the boss figures out it would be good if we would have a central database of ours customer contacts instead of salespeople just keeping business cards of their contacts in their briefcases and phones. But it is not good to put it into the accounting software because that is desktop based and besides you don’t want to buy expensive licences for the salesies. So you volunteer to solve it even though you never even saw ASP.NET, but you watch an 1 hour tutorial, make that one table, pull that on the website, sort out the authentication, and you have an application. Then as the new and new requests keep rolling you keep googling and learning how to do them. In two years you are an expert in ASP.NET and you have a complicated app with 100 tables. (And usually an utter mess and you probably will need to make up a bullshit excuse to be allowed to rewrite clean.)
So… Microsoft is for the cases when you want something immediately useful, and then it will just grow organically out of it, and you learn while doing it. Open source is when you already know how to, you have a project with plans and designs, and you don’t need something immediately useful.
You are 18. You evidently have some degree of ambition. (Even ‘wanting to do little net work to live comfortably’ is an ambition that some wouldn’t even consider.) You will need to learn things. Especially if you don’t go down the mainstream route of drifting through school getting some piece of paper that says you are qualified and then doing things that will keep a boss from firing you. Making your own way takes effort and rather a lot of independent motivation.
I’d rather not. Walmart sounds better. My ambition is to maximize the chance of existential win. This post wasn’t really about me. I’ll be fine doing whatever. I already have job opportunities, and anyway, I’m pretty Buddhist. Homelessness suits me fine. Money would be great, but there are lots of skills I’d like to develop before I develop moneymaking skills.
My ambition is to maximize the chance of existential win.
My observation is general. ‘Money for survival’ is close to the minimum ambition that will require (emotionally) hard work, and learning and doing things you seriously suck at that will make you feel stupid. Maximising the chance of existential win is far, far greater. This is why observations such as those are useful in as much as they are identifying a problem that may need to be worked around.
I dunno, it feels like there’s this big unknown gap between me and being a below-average web programmer, and I don’t like being below-average at anything, let alone having to work hard to become below-average. Hence I also avoid learning math, even though I know I really should learn more.
This is one of the most prevalent forms of self sabotage in existence.
Maximising the chance of existential win is far, far greater.
Right, so I attack that problem, because I must. I’ve picked up skills before, it’s not a general problem for me. I’m good at a lot of things. I brag about it way more than I should. I just don’t like learning things these days unless the payoff seems good enough. ‘Learning to code’ doesn’t seem all that worth it when there are lots of other more direct things I could be doing, like studying the neurobiology and chemistry behind the mechanisms of nootropics.
‘Learning to code’ doesn’t seem all that worth it when there are lots of other more direct things I could be doing, like studying the neurobiology and chemistry behind the mechanisms of nootropics.
And then, of course you can collaborate with me. I’ve got programming skills, know enough stats to get by and am now studying pharmacology and more statistics. Since I’m typically drawn to the technical side of things and also probably better at making money than neurochemistry I’ll quite probably end up just making enough money to employ folks to research the interesting stuff. At least that is my plan.
To me, it sounds like web programming fits the bill of the type of skill that you say you want. The only question is whether it will be worth the effort to get through the learning curve (though you can basically get started doing stuff very fast), and dealing the frustration of problems that take time to solve.
I really have no idea how well the benefits and costs will match up to other things you can spend your time on, but it does seem that web programming skills could be an asset for your effort in the domains of nootropics and existential risk reduction. Here are a few random ideas that web programming could help you implement:
Making a blog for some x-risk entity, or running your own x-risk blog, or any kind of outreach website
Making a database of information on nootropics with a web interface (even just for yourself, or people working with you; there is plenty use for websites or web services that don’t face the public)
Making a website where people can journal or share information on nootropics (“NooBook?”)
Every cause wants to be a cult… and also have a sweet website.
This is true. I actually have a lot of fun programming (when it’s going well), and especially when I get to throw in graphics design stuff. (I really like nautiluses, so I wrote this script in Processing that made a photoshopped and edited nautilus lazily follow my mouse pointer around… it was sooooooo cute. Ahem.) I think I’ll pick it up, but do so during the ‘fun’ hours of my day.
Kid, hate to break it to ya, but have you looked at all the studies about nootropics?
There are “veerrrryy few” done in normal healthy adults. Their actual effects, are very contradictory, and not that great. Sure, there are a few glowing reports about it....but there are also a great deal of “this is bunk”
Even those studies done in rats and the elderly have few solid and stable results. They are often different for each study.
As a good rule, anything that works is either illegal or prescription, or there is a movement to make it illegal(like salvia)
Why? Because, stuff that works, the word gets around quickly. Quickly enough, that worried parents and politicians with ambition find out about it too.
A statistically-significant number of people I know have had significant effects from piracetam. The vast majority of this group were very familiar with other mind-altering substances and could therefore probably be trusted to distinguish actual effects from pure placebo.
I don’t think that’s a good argument against itsunder9000: I’ve seen plenty of supposedly sophisticated people who you would expect to be able to distinguish from placebo advocate things which did not do jack for me in my own blinded or randomized experiments.
For example, the people who praise LSD microdosing have generally taken more psychedelics than I’ve even heard of; and what happened when I did a blind randomized self-experiment? No effects (1 trend toward benefit, 1 trend towards harm). Seth Roberts had been self-experimenting for decades longer than I have, and believed that treadmill usage benefited his spaced repetition performance; what happened when I did a randomized self-experiment while skeptical? Statistically-significant harm to my spaced repetition performance, the opposite of what this sophisticate’s introspection told him. Seth Roberts thought vitamin D at night hurt his going to sleep and taken in the morning, improved his awakening the next morning; what happened when I did a blind randomized self-experiment? I found that he was right about the first thing, and wrong about the second (no benefit). And so on.
I didn’t believe that much in the placebo effect before I started blind self-experiments. But I sure as heck do now.
(That said, I don’t necessarily agree with itsunder9000. Big clinical medical trials are in unhealthy old adults, yes, but the psychology trials are usually done with that white lab rat of psychology—college students. And there are a few nootropics with enough studies to have some confidence in the claims.)
It’s definitely not a knockdown argument, it’s true. It’s mostly a large pile of circumstantial evidence that makes me slow to doubt it’s effectiveness.
Piracetam has a reputation for being subtle. That doesn’t mean it’s not working (aspirin’s effects are subtle too), but it does mean that in the absence of at least semi-rigorous experiments, it’s hard to distinguish from placebo even for people who’re skeptical and experienced with psychoactives.
One friend of mine (neuropsych major, experienced with a wide variety of psychoactives) got similar but slightly stronger results with what I think was over a slightly longer period than gwern; I think he posted his results only on Facebook, though, so I’m not comfortable sharing a link to his writeup.
And anecdotally, a wide sample of people at the college found other placebos not giving the same benefit; every finals week a large table of food and mostly-placebos is available via a student group, and enough people swore by piracetam over the others that when it disappeared in a particular year (it’s sale got somehow regulated), its absence was missed.
Is this talking about me (SL), or is there some other person of our acquaintance who’s written up an experience with piracetam? I can chime in with my experiences if so desired.
Okay. I’m not going to post my writeup since it’s a little outdated — close to two years old now — and contains a lot of info irrelevant to this discussion, but the gist:
I tried out piracetam very actively (using it frequently, varying a lot of things, and closely noting the effects) for about two months in summer 2012, and have been using it periodically since then. I didn’t notice any long-term effects, though I don’t think I’ve actually ever tried to test the effects of a fixed long-term regimen.
What I did find was very dramatic acute effects, starting within an hour or two after taking it and lasting for a couple hours. These effects included music enhancement, visual enhancement (colors look brighter, textures look sharper), relief from anxiety/depression accompanied by a sense of clarity, and often mild euphoria.
While I haven’t done any blind tests and therefore can’t be entirely sure the effects aren’t placebo, they’re often quite strong (e.g. piracetam has helped me go from being very anxious to feeling very clear and self-possessed in situations where I wouldn’t expect that to happen otherwise) and some of them feel quite unlike any state I experience when not using piracetam.
It does seem to be difficult to get piracetam to work right, though — there seems to be idiosyncrasy in the dose people respond to, you have to figure out how much choline to take with it, tolerance builds, you might need to take a high initial dose (‘attack dose’) to get effects immediately, etc. I can see how this unreliability might seem characteristic of a placebo, but I can also see how it might cause people to falsely conclude that something was a placebo because they didn’t get effects from it easily.
Two pieces of advice which work for me; your mileage may vary.
1) Let the projects drive the education, not vice versa. Learn languages and language features when you have a way to apply them immediately; you’ll remember them better.
2) Make sure you can run the code before you write the code. ;)
So, I have a forgotten year of C++ under my belt and I can work with HTML and CSS. What exactly goes into web programming? I was imagining it’d be a few months studying CSS, Javascript, jQuery, Python, MySQL, PHP, Django, that Google Apps language, et cetera, and it just sounded like a lot of work.
Yeah, this kind of stuff. You will mainly need a web programming language and probably a framework. HTML is pretty simple, and CSS isn’t a big deal, though it’s quirky. You don’t really need to know much about MySQL or Javascript to get going. (Learning database concepts will be useful later, but the skill also gives you a good payoff because it will teach you some ways of statistical thinking.) You will also eventually need some Linux.
But you only need a bit of knowledge in some of these areas to start making stuff and start having fun. HTML + CSS that you already know + programming language and maybe framework + follow very basic instructions to set up a MySQL database.
Also, I’ve had 2 occasions where I spent a few hours looking for resources to help with a problem and I just had to give up, which is hella frustrating.
Yes, this will happen in programming. Sometimes a session of programming will be like banging your head against a brick wall until it breaks, then moving over a few inches and banging your head against another spot in the wall.
Documentation + Google is your friend. Most problems I run into that I can’t immediately solve myself can be solved within a few minutes of Googling. Of course, it helps when it’s typical web programming problems that already have like a million people on the internet asking the same question as you. Just try something, Google the error message, try what it says, then Google the next error message until there are no more errors and things are working. I can do things I’ve never done before very fast that way.
Many problems will take several hours to solve. Some will take days to solve. When you spend all that time stuck on exactly the same thing, then it’s frustrating, especially if when you solve it, it turns out to be something stupid like a typo or a badly documented quirk of a function or something. For me, that’s the exception, not the rule. Even when working on a tough problem that takes a long time to solve, I’m typically making progress along the way. When the problem turns out to not be something stupid or obvious that I missed, then it’s a really nice feeling of accomplishment when you solve it. Variable reinforcement schedule, and all that. It’s a great feeling to finally solve a challenging problem that took you days, when you were never even sure if you could solve it.
The result is that how you feel about programming depends a lot on where you are in your current problem-solving cycle.
I dunno, it feels like there’s this big unknown gap between me and being a below-average web programmer, and I don’t like being below-average at anything, let alone having to work hard to become below-average.
I think it’s possible that you’ve been a bit too hard on yourself, and not given yourself enough time to see what programming is like and assess your aptitude and enjoyment for it.
I’ve had 2 occasions where I spent a few hours looking for resources to help with a problem and I just had to give up
This is standard when you’re attempting to teach yourself programming and you’re still an apprentice. There’s no shame in it. Get over yourself and post on IRC and forums for help when you’re having a problem that Google hasn’t been able to help you with after 10 minutes. Or I’d be happy to tutor you. Especially if you’ll let me work on whatever I want to work on and just explain everything I’m doing to you and make you do some bits so you’ll learn stuff. I really want to try this (I suspect my psychology is such that I would experience very strong motivation from this.)
Oh yeah, so far I’ve given like 3-5 people programming lessons and all of them were hesitant at first but afterwards said they had a great time and learned faster than just about anything they’d learned in their life (kind of like this). So my reviews are good. Seriously, I am bouncing my foot with excitement just thinking about this. If anyone in Berkeley, CA wants to learn programming they should pm me.
Learning to be OK with feeling stupid is good anyway because if you shy away from it then you’ll be less likely to venture in to intellectual domains you’re unfamiliar with, and you’ll hesitate more to realize you’re wrong. Seriously, I think being comfortable with being wrong might be the core rationality skill. (See my post that touches on this for more.)
We’ve already talked a little about economics but it seems you haven’t really got the hang of it yet. If you plan to sell your labour, the ‘value’ of your labour is not your problem, negotiate the best rate you can for what you can do. If you take a more entrepreneurial route you can try to sell a product. Again, your effort is not the point, you just negotiate for what the results are worth.
I’m starting to regret writing the post in the first person, ’cuz people think I’m actually looking for employment. I’m not, really. Anyway.
I’m not thinking about how much money I could make, I’m thinking about how competent I think I am. What you say makes sense if I cared about money. What I really care about is being able to have the identity of someone who codes competently, in which case the ‘value’ of my labor is what determines that. I want to be good at what I do, and I’m complaining about the huge gap between me-now and me-good, no matter how much money I’d make in either case.
But that’s off-topic for this post, so I shouldn’t have brought it up.
It’s kind of arrogant to think that you are qualified to be the judge of your own value. If someone seems happy to pay you for your efforts, accept it in good grace and let them worry about what your time is worth.
Of course I’d look for external validation now and then, but that’s not as important to me as building skill. Periodic tests via oDesk or the like should be enough to test my self-assessments for accuracy. But I don’t care all that much about what the market thinks, really. I just want to build skills. I’ve managed to play guitar for 3 years without having the market judge its value, but I could care less. I play guitar for myself and sometimes my friends, and I do it because I care about its ‘value’: to me. I don’t need to go busking to determine that.
I think it would be worth you while to learn some economics. Comparative Advantage would be a good place to start. Your values are valid but you should be fully aware of your choices.
I think you underestimate my knowledge of economics. I know about comparative advantage, marginal cost, diminishing marginal returns, Pareto frontiers, et cetera. I took AP Econ and folk at SIAI use the terminology quite a bit.
Bow hunting skills?
I totally have bow hunting skills! But not nunchaku skills… :/
I apologize, I tend to think that people who think their own academic accomplishments are significant factors in their future salary are probably confused about the way the world works.
I also expend significant effort on unmarketable skills (snowboarding in my case) but I don’t expect anyone else to fund me for it. We live in a market economy; figure out your comparative advantage and negotiate the maximum price you can achieve for it.
I also expend significant effort on unmarketable skills (snowboarding in my case) but I don’t expect anyone else to fund me for it. We live in a market economy, figure out your comparative advantage and negotiate the maximum price you can achieve for it.
Or, like, not. I totally realize that’s what I would do if I wanted to make money, but I don’t. At least for now, I only care about unmarketable skills. That’s why I have so many of them. It was a mistake to write this post in the first person; I’m sorry for being misleading. But I’m not actually looking for employment. I have employment opportunities already, and things to do besides.
Money is not only the unit of caring, it is the unit of exchange. It is not straightforward to trade money for time however (at least by the hour) so you are comprehensible. I’m sorry if I offended you.
Making money is not my comparative advantage. :) Really, though, I intern for SIAI, and when I’m not doing that I’m building skills so that I’ll be better able to work for SIAI, and when I’m not doing that I’m building skills that are related to intelligence amplification research. That is, at least for now, my comparative advantage: there’s no easy way for me to make enough money to pay someone else to do it better than I could. Volunteering at SIAI for a year gave me a lot of domain-specific knowledge.
I’m sorry if I offended you.
You didn’t offend me at all! Sorry, I didn’t mean to sound bristly.
Want some brutally truthful tests designed to see how competent you are?
Take the SAT test, , which measures math ability, and verbal ability. Find a few psychology tests that try and measure memorization ability(like, how quickly and well you can memorize a topic)
Why? Because real world success, in intellectual endeavors, is largely a combination of how large your fluid intelligence is+memorization ability+ work ethic. The rest is due to combos of other factors.
Besides the SAT, you can take the LSAT, and study for a few things on there that require specific knowledge. The test is the single largest predictive factor of success in law school, and blind tests of competence.
There are a few other tests you can take. I recommend the AMC, which requires studying some topics outside of the regular school curriculum, but not too much.
Or, you could play starcraft for 3 months, and see how high you end up ranking.
Beyond these,I don’t know of many good tests to see how competent you are.
Are you joking? Starcraft isn’t even a well-designed game—it has all kinds of crazy barriers to entry and elements that explicitly exist to make it unnecessary difficult for people to pick up. Besides, it’s easy for even a bad gamer (see: me) to achieve a high-looking ranking (top 25 Diamond) in Starcraft II thanks to its nonintuitive rating and placement system, and true rankings are only maintained for the top 200 people in each region.
Yeah, I’ve done many of those. I took the SAT when I was 12. I’ve taken a few probably-inaccurate online IQ tests. I’ve done a few cognitive testing suites at SIAI. I’m in pretty good shape. In general though, there are better frameworks for cognitive testing. It’s probable that one could make a neat suite out of PEBL, which is free and very customizable. Fluid g seems over-emphasized. The limiting factor for most rationalists tends to be strong metadispositions for thought, reflection, and drive.
We didn’t study long enough to get any statistically significant data. Like, not even close. And I think sending off the data (even without names attached) would sorta breach an implicit privacy agreement among those who took part in the tests.
Jaeggi 2008 didn’t necessarily study very long either, some around/less than a week.
(I wouldn’t be asking this question, by the way, if you had written more concretely and said something like ‘We only studied for 2 days, not long enough to get any statistically significant data’.)
Hmm, most people would be ok with that sort of data being sent out in an anonymized form. I’m surprised that you didn’t suggest that before hand. Is there any chance you can contact the people in question and get their permission to release the anonymized data?
Is there any chance you can contact the people in question and get their permission to release the anonymized data?
We could, but really, there’s no information there, no matter how much Bayes magic you use. It’s noise. If the data was at all significant then we’d send it out, of course. We might actually have gotten anonymized disclosure agreement from everyone; I don’t remember. But it didn’t end up mattering.
Yeah, but that only matters from a self-assessment standpoint if the causal graph is wealth --> score <-- ability, whereas for an uncoached entrant it’s almost purely wealth --> ability --> score.
whereas for an uncoached entrant it’s almost purely wealth --> ability --> score.
And coaching can’t make up a large part of the score difference, either. There’s more than 100 points discrepancy on Critical Reading or Math alone between the lowest and highest income groups, whereas coaching only creates improvements of 30 points in Reading and Math combined.
A major problem with applying this point of economics is that most employers haven’t really got the hang of it yet either. It is a sad rationality fail to be focused on what you could have accomplished if your potential trading partners themselves were only more rational (unless you can actually make them more rational).
If you can find employers who understand this, more power to you.
So, I have a forgotten year of C++ under my belt and I can work with HTML and CSS. What exactly goes into web programming? I was imagining it’d be a few months studying CSS, Javascript, jQuery, Python, MySQL, PHP, Django, that Google Apps language, et cetera, and it just sounded like a lot of work. Also, I’ve had 2 occasions where I spent a few hours looking for resources to help with a problem and I just had to give up, which is hella frustrating. I couldn’t get processing.js to work which sucked ’cuz I’d written up this cool thing in Processing and figured it’d be really easy to work into a website I’d designed, and I felt stupid, and I don’t like feeling stupid. I mean if I’m chilling with SIAI folk then I guess I might as well take advantage of their knowledge and pick up some web programming (especially since it’s really just fun in the first place), but… I dunno, it feels like there’s this big unknown gap between me and being a below-average web programmer, and I don’t like being below-average at anything, let alone having to work hard to become below-average. Hence I also avoid learning math, even though I know I really should learn more.
It really depends on what someone needs you to do. There are a few different approaches to web programming, which include different workflows and different ways of breaking up who does what. Generally, most things on the web can be broken up into “front end” and “back end”, which change meaning based on context. “Front end” can usually be divided into “design” and “implementation [or] programming”. “Back end” can usually be divided into server administration, the database, and programming.
I work at a small firm (in person) and so do both front-end and back-end programming, but usually someone will specialize in one or the other or some aspect of it. For folks condemned to work in the world of Microsoft, there is usually a lot of complicated technical work to interface various proprietary Microsoft technologies using abstract frameworks on the back end.
The traditional back-end setup in the Unix world is what used to be called LAMP (back when people felt the need to call it something) - a machine with a Linux OS running the Apache web server and MySQL database engine, with Perl (/PHP/etc) serving up dynamic pages.
On the front end, you basically have a web page crafted using HTML (usually served via some complicated method from the back end) as well as whatever the user-agent is going to let you get away with. In practice, depending on the application, you will use HTML for the page’s semantic structure, CSS for style and layout of the HTML, and Javascript for dynamic content on the front end, often employing a library like JQuery to abstract away browser quirks or JQuery-ui to add user-interface functionality. Plugins like Flash might also be used to create dynamic content with a more consistent user experience.
It’s really impossible to prepare ahead of time for whatever web development job someone might need done, and there are gurus who are experts at any particular one of the technologies above, so it’s a little tricky to set out trying to find a niche to fit yourself into. I can do anything we randomly decide to get involved in at my job, but I still don’t fit the bill for a lot of the job postings out there because I have no reason to study the technologies used on Microsoft servers, and I hardly ever use Flash since Javascript is actually almost as useful these days, and we’ve never seen a reason to work seriously with Ruby or Python since they do so miserably in benchmarks against our old standby Perl (or C if we really need performance) and we’re not popping out unique web apps on a daily basis that would need a complicated framework (like Ruby on Rails) to abstract away a lot of the work at the expense of performance.
The real trick is staying good at web development. Aside from graphics and games, the web is the main computing frontier where things are constantly changing and improving so constant study and practice is needed to stay ahead of the curve.
I’m pretty confused about back end programming. I figured it was possible to just let other people handle that for you, like Heroku or some other hosting service where you don’t have to worry… but I’m totally in over my head here, is that not how that works? I guess if I got into web programming I’d want to focus as much as possible on the front end, designing things and trying to worry as little as possible about optimizing data structures and the like.
Back end programming just means the programming of what you want your site to actually do, as opposed to how you want it to look. i.e. it’s the part that actually qualifies as “programming” (coders really hate it when web designers refer to web design as “programming”).
If you’re just setting up a web site based on an existing code base (like how LW is based on the reddit code), then there may not be any back end programming that needs to be done. But if you’re actually creating something original, somebody needs to actually write the code to make it do what you want it to do.
Like say we were trying to create LW from scratch. You’ve laid out all your HTML and CSS and images and whatnot for how you want everything to LOOK. But there are all these buttons and stuff, like the “Create New Article” button in the top right. You can lay out where that button is and what it looks like, but what actually happens when a user clicks on it? That’s where back end programming comes in—probably you respond to the click by creating a new row in an article table in your database, which has a schema you’ve created, specifying all the fields that need to appear—the article content, the article author, timestamp, maybe the article karma would get stored there too. Then it generates from that a stub article which it passes back to the frontend which then decorates it and renders it for the user.
And then of course there would have to be code written to handle commenting and the karma system. Those would probably be stored in their own db tables with their own schemas you’ve designed, and you’d have to write the code that takes a user action, like clicking “comment’ or “vote up” and actually doing something with that, incrementing the comment’s karma count by one and storing that back to the database.....
...thats’s back end programming. And as you can see, its definitely not something a hosting provider could just do for you, cause it’s very specific to your site and what exactly you want your site to do.
Sorry for being rambly and incoherent.… i took an ambien about a half hour ago and am in that ambien half asleep/half awake/half stoned state
Thanks, I’m significantly less confused now, and back end programming now sounds like fun.
It’s a lot of fun. Now you’re making me whimsical! ;)
Hmuh, this is intimidating. I was gonna pick up some PHP but to actually use it for a project I’ll need MySQL and for that I’ll need to set up an Apache web server of some kind… which is intimidating, and I’m probably approaching this the wrong way, especially as I’m not sure yet what I’d even be scripting for. Also I feel alienated as a Windows user; I have Ubuntu but it’s frickin’ annoying sometimes. How do most people get started with this whole hacker thing?
EDIT: Eff it, I’ll switch to Linux and play with Django, it seems easiest. Stupid Linux.
There is essentially no reason to bother with PHP these days. It’s a relic and you’d end up having to learn all sorts of arbitrary distracting things.
I can empathise with the intimidation. There was a whole heap of linux administration stuff that I had to pick up to get started. Fortunately, you don’t need to do anything like that any more and it can be even easier on windows! You can install the whole stack (ie. Ruby, Rails, apache and mysql) all at once. From there you can just find a tutorial to follow then start copy and pasting stuff from similar applications till you have one that does what you want. (You didn’t hear ‘develop by cut and paste and google’ from me! ;))
RubyStack is one option. The one I have used is InstantRails. I think that one is getting out of date (about a year old) but it probably doesn’t make any difference for your purposes.
I don’t know what the options are for other web development frameworks. I’m sure there is something simple out there for Python somewhere but I just haven’t had reason to look into it.
So if you wanted to get started it is easy enough. Depends on your interest.
When I have something I want to do I go do it. Sometimes that means learning stuff like programming. Sometimes it means learning pharmacology. That’s probably the underlying spirit behind the ‘hacker’ mindset.
I rather like PHP. Examples of “arbitrary distracting things”?
Thanks! Ruby looks good, but I know more Python/Django folk, so it’s tempting to leave Windows for a bit. I guess I’ll start with the RubyStack and see what I can build. I’m guessing a lot of the basic skills I need are transferable to Django development anyway.
I’m a rails developer myself and i shudder to think of developing in Windows. It really is pretty simple in Ubuntu, just open Synaptic and download anything that says ruby.
If you want to go with heroku you don’t even need apache.
I wonder if there is a “DjangoStack” for windows about someplace. Maybe your friends would know? Not that I’m saying linux is bad, just that you’ve already got enough stuff to be absorbing without cramming in two languages and frameworks at once. (But you are right, the fundamental concepts are the same.)
I downloaded RubyStack and the install process doesn’t do anything; not sure why. It flashes a BitNami logo and then goes blank, but the process is still sitting there in my task manager… maybe it doesn’t play nice with 64 bit Windows 7. At any rate BitNami also has a DjangoStack! So I’ll try that instead. :/
I downloaded RubyStack and the install process doesn’t do anything; not sure why. It flashes a BitNami logo and then goes blank, but the process is still sitting there in my task manager… maybe it doesn’t play nice with 64 bit Windows 7. At any rate BitNami also has a DjangoStack! So I’ll try that instead. :/
...and that also didn’t work, so it looks like Ubuntu for me, where my problems will be even greater. I hate computers.
So the good news is, you need none of these “stacks”. Really. What you’re trying to do here is run before you’ve learned to walk.
Web programming is as simple as writing a program that does
and redirecting the output to “index.html” when you run this from shell. This gets you a dynamic Web site generated from a program that you wrote.
If that’s too simple for you, congratulations: you’ve mastered enough of the fundamentals to get on to the next step. Something like parametrize the Web page to greet you by your name.
You may be protesting at this point that running the program whenever you want to update the Web site wasn’t your idea of “Web programming”—you want a Web site that updates on the fly.
Now we’re talking about Web frameworks. But still you don’t need a “stack”, you need to build up an understanding of how Web servers work, and maybe study a few architectures of historical interest:
CGI (the way Web programming was done for years, basically a hack to get the “invoke program from command line and redirect output to a Web connection” idea to work on-the-fly)
PHP as an Apache module, or what happened when the Web server coders realized the hacks weren’t going away anytime soon
frameworks like Sinatra, a gentle introduction to Web frameworks in a modern language without excessive baggage
With something like PHP or (if you lean toward Ruby) Sinatra, you’re reaching the point of building up arbitrarily complex Web pages in response to HTTP requests, on the fly. At this point you’d better have a solid understanding of how the dance unfolds between Web clients (typically browsers, but not just) and Web servers. What are requests and responses, headers, parameters.
Rewrite your Hello World example in Sinatra. The next exercise is to orchestrate a simple interaction where your Web app displays a form with a text box asking for your name, and a Submit button which takes you to a page greeting you by name. Just this little loop requires you to stay on top of a surprisingly large number of abstractions spanning several layers.
Note that at this point you still don’t need a database, knowledge of CSS is superfluous, and client-side scripting very much not even on the agenda. Discussion of design patterns like MVC should be deferred until you have experienced for yourself the issues that these patterns are supposed to solve. (That way, you can judge for yourself to what extent the big frameworks like Rails actually solve the issues. Affective Death Spirals are just as deadly in programming as in the rest of your intellectual development.)
When you feel comfortable with this kind of program (check that by writing a more complex one like a calculator or a tic-tac-toe game), you can move on to one that handles arbitrarily large sets of data. By now if you feel like tackling MySQL, go ahead and do that, but you could also focus on your learning programming (as opposed to learning technology). Get your data from a text file, maybe YAML which is like XML, only much more friendly.
Anyway, that’s the kind of learning that works for me: instead of getting in way over my head, I try to cut it down into chunks that I can master one at a time.
This comment inadvertently recalls to my mind Perlis’s epigram: ‘most people find the concept of programming obvious, and the doing impossible’.
:)
ETA: I remained torn for a while, but I’ve edited the grandparent to fix the mistake.
I’m confused, you’re talking about data for a tic-tac-toe game, which should be stored in YAML? I got a tad confused because YAML sounds like HAML and I’d just been reading about HAML, then I realized I’d never used XML and didn’t even realize what it was for, so I tried to see if it was related to HTML which I’ve used a lot of, but it looks like it’s not, it’s just a way to format text files so that programs/scripts can import data from them. HAML on the other hand is a prettier version of ERB which is a way/template to use Ruby to make HTML use variables. So HAML is this thing I shouldn’t be using yet because it’s complicated and I should be focusing on Sinatra/Ruby whereas YAML I should start using eventually because it’s a way to format data for easy interpretation by ruby scripts and the like. Or did you mean YAML should be used for other things? Am I totally off?
No, something like tic-tac-toe has a bounded set of data to keep track of, no database or other long-term storage required.
Once you’ve mastered tic-tac-toe or the like the next kind of Web app you’re likely to tackle is one with an unbounded data set: for instance, a list of user accounts, or a list of posts and comments. Data like this should survive shutting down and restarting your server.
The traditional approach is to use MySQL to store this kind of data, but I would advise against getting a premature interest in MySQL, as there’s a risk that doing so will warp your thinking. YAML is an alternative for storing such data that would keep you more in the Ruby world.
All four of HTML, XML, YAML and HAML share the two initials ML—they’re all “markup languages”. It’s easy to get confused because the differences between them are minute, in the grand scheme of things, and only relevant to people who care so deeply about what tools they work with that it magnifies the differences.
The one you can’t do without is HTML, so it makes sense to use only that for a little while. (Actually in the past few years HTML has been redefined as a dialect of XML, so using it means you’ll also be using XML.)
Using HAML makes a lot of sense, but there’s also a bias it (and ERB, and every similar templating language) induces that you want to be aware of. When you start using these things you start thinking of your generated Web pages as “documents with Ruby variables”.
This is fine for some class of features but it will wreck your design skill if you generalize the approach too eagerly. Some (indeed many) portions of a significant Web app should be thought of as Ruby objects with the ability to output a HTML representation of them. Things like row/column tables; menus; data entry forms; recursively nested structures like LW comment threads; and so on.
YAML, and pretty much every data serialization method is overkill for Tic-Tac-Toe—you can store a game just as a few integers if you represent the board as a magic square: http://www.reddit.com/r/programming/comments/9904e/interesting_alternative_to_captcha_pic/c0bw41g
Neat!
I think I’m limited to just playing around with Ruby on Windows for now; my wireless card doesn’t work in Linux. And the thing that might work to fix that is in a package that I need the internet to download. I hate Linux so much, it’s seriously a horrible operating system. GRUB actually knocked out access to all of my partitions once, meaning I couldn’t even get to GRUB and therefore Windows 7; there’s no way I would’ve been able to fix that without SIAI folk. I’m also running it in VMWare and the internet works there but Gems doesn’t: the paths are messed up somehow so that gems don’t run, and the internet isn’t helpful in fixing that. Stupid stupid operating system. No wonder everyone owns a Mac.
It helps that Ruby is installed on Macs out of the box :)
Being able to get gems is kind of a big deal in Ruby, but I as I said above you don’t need the big guns like Rails yet.
Yeah, I was interested in familiarizing myself with Sinatra but without gems working I guess I’ll… uh… play with Python/Ruby and see which I like more until I can afford a Macbook? I feel like it’s a little ridiculous that web programming is so limited on Windows. I must be missing something?
For some reason the whole Web thing had historically much more traction in Unix family OSes. Windows has to do extra work to make it look to the server programs as if they’re running on something Unix-like. Like making its non-Unix paths make sense to programs that are mostly coded with Unix in mind.
So what kind of error messages are you getting when you run gem commands?
″ installing to ~./gem /var/lib/gems/1.8 and /var/lib/gems/1.8/bin aren’t both writeable ” and since /var/lib/gems/1.8/bin isn’t in my PATH gem executables won’t run.
I tried doing what it says here to no avail; it did nothing as far as I can tell. I’m not sure if this is a VM problem or an Ubuntu problem.
We’d need to go to a real-time convo to get anywhere with this, I think. I’m about to have dinner now but I can swing by the LW IRC channel later if that suits you, PM me in that case.
I got gems and therefore Sinatra working. :) I also think I got Rails 3 working but I haven’t tried messing with it yet… Everything seems really spotty; the ‘heroku’ command worked but then it stopped existing so I reinstalled it… Did I just install it in two different places or something? Or did I need to ‘load’ it somehow? This all seems kind of magical in a bad way. Oh well. I’ll take your advice and stick to Sinatra for now. Thanks!
Welcome down the rabbit hole!
I am not a web developer, but as a Linux user of 15 years let me explain why it might not be as bad as you think.
Get any old computer and put Linux, Apache, MySQL on it. (Those softwares require very little in the way of hardware resources unless you are serving 100s or simultaneous users.) Network the Linux machine with your Windows machine. Even better if your Windows machine has enough memory, run Linux on a virtual machine on Windows. I do not know what the cool kids are using these days in the way of virtualization software, but VMWare would work.
Use a web browser on Windows to test your web app of course.
Editing of text files (mostly config file for Apache, etc) on the Linux box or Linux virtual machine can probably be done using whatever text editor you already use on Windows though I do not know the details of how to set that up in any editor other than Emacs. (For Emacs I would probably use the FTP protocol. The SMB and NFS protocols are alternatives.)
True, you will probably need to interact with a shell on the Linux box or the Linux virtual machine occasionally (using something like PuTTY on Windows), but this way saves you the trouble of having to learn anything about Linux’s graphical user interfaces. The good thing about the shell is that it lends itself very well to textual tutorials, with the result that there are 10s of 1000s of blog posts and web pages describing in exact detail how to do stuff in the shell. I would be happy to answer questions by email about the shell, but I do not know about Apache or MySQL.
This way of working with Linux—by establishing connections to it with browsers, text editors, FTP clients and ssh clients like PuTTY on Windows is very common.
Everything I have described is the worst-case scenario. You can probably either install Apache, MySQL, etc on Windows like wedrifid says or avail yourself of some online service that will host the software for you and allow you to configure and administer it using a web interface.
A good question. Yes, for ‘server administration’. But things like the database and core project logic are obviously handled by the developer.
(See Kodos for more details of what that entails.)
What Microsoft is actually good at is linking front and back end. People can pretty much take the mouse, pull an SQL table on a website and have all the CRUD generated for them and it works. The open source / linux world with its strong focus on the separation of concerns and modular architecture is very good for the kind of projects where you want to build with scalability in mind and you don’t mind not getting immediate results.
Microsoft (ASP.NET and many other products) is for a different philosophy or situation. For example you work at a business where the boss figures out it would be good if we would have a central database of ours customer contacts instead of salespeople just keeping business cards of their contacts in their briefcases and phones. But it is not good to put it into the accounting software because that is desktop based and besides you don’t want to buy expensive licences for the salesies. So you volunteer to solve it even though you never even saw ASP.NET, but you watch an 1 hour tutorial, make that one table, pull that on the website, sort out the authentication, and you have an application. Then as the new and new requests keep rolling you keep googling and learning how to do them. In two years you are an expert in ASP.NET and you have a complicated app with 100 tables. (And usually an utter mess and you probably will need to make up a bullshit excuse to be allowed to rewrite clean.)
So… Microsoft is for the cases when you want something immediately useful, and then it will just grow organically out of it, and you learn while doing it. Open source is when you already know how to, you have a project with plans and designs, and you don’t need something immediately useful.
You are 18. You evidently have some degree of ambition. (Even ‘wanting to do little net work to live comfortably’ is an ambition that some wouldn’t even consider.) You will need to learn things. Especially if you don’t go down the mainstream route of drifting through school getting some piece of paper that says you are qualified and then doing things that will keep a boss from firing you. Making your own way takes effort and rather a lot of independent motivation.
I’d rather not. Walmart sounds better. My ambition is to maximize the chance of existential win. This post wasn’t really about me. I’ll be fine doing whatever. I already have job opportunities, and anyway, I’m pretty Buddhist. Homelessness suits me fine. Money would be great, but there are lots of skills I’d like to develop before I develop moneymaking skills.
My observation is general. ‘Money for survival’ is close to the minimum ambition that will require (emotionally) hard work, and learning and doing things you seriously suck at that will make you feel stupid. Maximising the chance of existential win is far, far greater. This is why observations such as those are useful in as much as they are identifying a problem that may need to be worked around.
This is one of the most prevalent forms of self sabotage in existence.
Right, so I attack that problem, because I must. I’ve picked up skills before, it’s not a general problem for me. I’m good at a lot of things. I brag about it way more than I should. I just don’t like learning things these days unless the payoff seems good enough. ‘Learning to code’ doesn’t seem all that worth it when there are lots of other more direct things I could be doing, like studying the neurobiology and chemistry behind the mechanisms of nootropics.
And then, of course you can collaborate with me. I’ve got programming skills, know enough stats to get by and am now studying pharmacology and more statistics. Since I’m typically drawn to the technical side of things and also probably better at making money than neurochemistry I’ll quite probably end up just making enough money to employ folks to research the interesting stuff. At least that is my plan.
To me, it sounds like web programming fits the bill of the type of skill that you say you want. The only question is whether it will be worth the effort to get through the learning curve (though you can basically get started doing stuff very fast), and dealing the frustration of problems that take time to solve.
I really have no idea how well the benefits and costs will match up to other things you can spend your time on, but it does seem that web programming skills could be an asset for your effort in the domains of nootropics and existential risk reduction. Here are a few random ideas that web programming could help you implement:
Making a blog for some x-risk entity, or running your own x-risk blog, or any kind of outreach website
Making a database of information on nootropics with a web interface (even just for yourself, or people working with you; there is plenty use for websites or web services that don’t face the public)
Making a website where people can journal or share information on nootropics (“NooBook?”)
Every cause wants to be a cult… and also have a sweet website.
This is true. I actually have a lot of fun programming (when it’s going well), and especially when I get to throw in graphics design stuff. (I really like nautiluses, so I wrote this script in Processing that made a photoshopped and edited nautilus lazily follow my mouse pointer around… it was sooooooo cute. Ahem.) I think I’ll pick it up, but do so during the ‘fun’ hours of my day.
Kid, hate to break it to ya, but have you looked at all the studies about nootropics?
There are “veerrrryy few” done in normal healthy adults. Their actual effects, are very contradictory, and not that great. Sure, there are a few glowing reports about it....but there are also a great deal of “this is bunk”
Even those studies done in rats and the elderly have few solid and stable results. They are often different for each study.
As a good rule, anything that works is either illegal or prescription, or there is a movement to make it illegal(like salvia) Why? Because, stuff that works, the word gets around quickly. Quickly enough, that worried parents and politicians with ambition find out about it too.
A statistically-significant number of people I know have had significant effects from piracetam. The vast majority of this group were very familiar with other mind-altering substances and could therefore probably be trusted to distinguish actual effects from pure placebo.
I don’t think that’s a good argument against itsunder9000: I’ve seen plenty of supposedly sophisticated people who you would expect to be able to distinguish from placebo advocate things which did not do jack for me in my own blinded or randomized experiments.
For example, the people who praise LSD microdosing have generally taken more psychedelics than I’ve even heard of; and what happened when I did a blind randomized self-experiment? No effects (1 trend toward benefit, 1 trend towards harm). Seth Roberts had been self-experimenting for decades longer than I have, and believed that treadmill usage benefited his spaced repetition performance; what happened when I did a randomized self-experiment while skeptical? Statistically-significant harm to my spaced repetition performance, the opposite of what this sophisticate’s introspection told him. Seth Roberts thought vitamin D at night hurt his going to sleep and taken in the morning, improved his awakening the next morning; what happened when I did a blind randomized self-experiment? I found that he was right about the first thing, and wrong about the second (no benefit). And so on.
I didn’t believe that much in the placebo effect before I started blind self-experiments. But I sure as heck do now.
(That said, I don’t necessarily agree with itsunder9000. Big clinical medical trials are in unhealthy old adults, yes, but the psychology trials are usually done with that white lab rat of psychology—college students. And there are a few nootropics with enough studies to have some confidence in the claims.)
It’s definitely not a knockdown argument, it’s true. It’s mostly a large pile of circumstantial evidence that makes me slow to doubt it’s effectiveness.
Piracetam has a reputation for being subtle. That doesn’t mean it’s not working (aspirin’s effects are subtle too), but it does mean that in the absence of at least semi-rigorous experiments, it’s hard to distinguish from placebo even for people who’re skeptical and experienced with psychoactives.
Gwern’s experience suggests a small effect.
One friend of mine (neuropsych major, experienced with a wide variety of psychoactives) got similar but slightly stronger results with what I think was over a slightly longer period than gwern; I think he posted his results only on Facebook, though, so I’m not comfortable sharing a link to his writeup.
And anecdotally, a wide sample of people at the college found other placebos not giving the same benefit; every finals week a large table of food and mostly-placebos is available via a student group, and enough people swore by piracetam over the others that when it disappeared in a particular year (it’s sale got somehow regulated), its absence was missed.
Is this talking about me (SL), or is there some other person of our acquaintance who’s written up an experience with piracetam? I can chime in with my experiences if so desired.
Indeed, it is you! Please provide first-hand details. (I’m pretty sure no one else of our mutual acquaintance has written up anything.)
Okay. I’m not going to post my writeup since it’s a little outdated — close to two years old now — and contains a lot of info irrelevant to this discussion, but the gist:
I tried out piracetam very actively (using it frequently, varying a lot of things, and closely noting the effects) for about two months in summer 2012, and have been using it periodically since then. I didn’t notice any long-term effects, though I don’t think I’ve actually ever tried to test the effects of a fixed long-term regimen.
What I did find was very dramatic acute effects, starting within an hour or two after taking it and lasting for a couple hours. These effects included music enhancement, visual enhancement (colors look brighter, textures look sharper), relief from anxiety/depression accompanied by a sense of clarity, and often mild euphoria.
While I haven’t done any blind tests and therefore can’t be entirely sure the effects aren’t placebo, they’re often quite strong (e.g. piracetam has helped me go from being very anxious to feeling very clear and self-possessed in situations where I wouldn’t expect that to happen otherwise) and some of them feel quite unlike any state I experience when not using piracetam.
It does seem to be difficult to get piracetam to work right, though — there seems to be idiosyncrasy in the dose people respond to, you have to figure out how much choline to take with it, tolerance builds, you might need to take a high initial dose (‘attack dose’) to get effects immediately, etc. I can see how this unreliability might seem characteristic of a placebo, but I can also see how it might cause people to falsely conclude that something was a placebo because they didn’t get effects from it easily.
Two pieces of advice which work for me; your mileage may vary.
1) Let the projects drive the education, not vice versa. Learn languages and language features when you have a way to apply them immediately; you’ll remember them better.
2) Make sure you can run the code before you write the code. ;)
Yeah, this kind of stuff. You will mainly need a web programming language and probably a framework. HTML is pretty simple, and CSS isn’t a big deal, though it’s quirky. You don’t really need to know much about MySQL or Javascript to get going. (Learning database concepts will be useful later, but the skill also gives you a good payoff because it will teach you some ways of statistical thinking.) You will also eventually need some Linux.
But you only need a bit of knowledge in some of these areas to start making stuff and start having fun. HTML + CSS that you already know + programming language and maybe framework + follow very basic instructions to set up a MySQL database.
Yes, this will happen in programming. Sometimes a session of programming will be like banging your head against a brick wall until it breaks, then moving over a few inches and banging your head against another spot in the wall.
Documentation + Google is your friend. Most problems I run into that I can’t immediately solve myself can be solved within a few minutes of Googling. Of course, it helps when it’s typical web programming problems that already have like a million people on the internet asking the same question as you. Just try something, Google the error message, try what it says, then Google the next error message until there are no more errors and things are working. I can do things I’ve never done before very fast that way.
Many problems will take several hours to solve. Some will take days to solve. When you spend all that time stuck on exactly the same thing, then it’s frustrating, especially if when you solve it, it turns out to be something stupid like a typo or a badly documented quirk of a function or something. For me, that’s the exception, not the rule. Even when working on a tough problem that takes a long time to solve, I’m typically making progress along the way. When the problem turns out to not be something stupid or obvious that I missed, then it’s a really nice feeling of accomplishment when you solve it. Variable reinforcement schedule, and all that. It’s a great feeling to finally solve a challenging problem that took you days, when you were never even sure if you could solve it.
The result is that how you feel about programming depends a lot on where you are in your current problem-solving cycle.
I think it’s possible that you’ve been a bit too hard on yourself, and not given yourself enough time to see what programming is like and assess your aptitude and enjoyment for it.
This is standard when you’re attempting to teach yourself programming and you’re still an apprentice. There’s no shame in it. Get over yourself and post on IRC and forums for help when you’re having a problem that Google hasn’t been able to help you with after 10 minutes. Or I’d be happy to tutor you. Especially if you’ll let me work on whatever I want to work on and just explain everything I’m doing to you and make you do some bits so you’ll learn stuff. I really want to try this (I suspect my psychology is such that I would experience very strong motivation from this.)
Oh yeah, so far I’ve given like 3-5 people programming lessons and all of them were hesitant at first but afterwards said they had a great time and learned faster than just about anything they’d learned in their life (kind of like this). So my reviews are good. Seriously, I am bouncing my foot with excitement just thinking about this. If anyone in Berkeley, CA wants to learn programming they should pm me.
Learning to be OK with feeling stupid is good anyway because if you shy away from it then you’ll be less likely to venture in to intellectual domains you’re unfamiliar with, and you’ll hesitate more to realize you’re wrong. Seriously, I think being comfortable with being wrong might be the core rationality skill. (See my post that touches on this for more.)
We’ve already talked a little about economics but it seems you haven’t really got the hang of it yet. If you plan to sell your labour, the ‘value’ of your labour is not your problem, negotiate the best rate you can for what you can do. If you take a more entrepreneurial route you can try to sell a product. Again, your effort is not the point, you just negotiate for what the results are worth.
I’m starting to regret writing the post in the first person, ’cuz people think I’m actually looking for employment. I’m not, really. Anyway.
I’m not thinking about how much money I could make, I’m thinking about how competent I think I am. What you say makes sense if I cared about money. What I really care about is being able to have the identity of someone who codes competently, in which case the ‘value’ of my labor is what determines that. I want to be good at what I do, and I’m complaining about the huge gap between me-now and me-good, no matter how much money I’d make in either case.
But that’s off-topic for this post, so I shouldn’t have brought it up.
It’s kind of arrogant to think that you are qualified to be the judge of your own value. If someone seems happy to pay you for your efforts, accept it in good grace and let them worry about what your time is worth.
Of course I’d look for external validation now and then, but that’s not as important to me as building skill. Periodic tests via oDesk or the like should be enough to test my self-assessments for accuracy. But I don’t care all that much about what the market thinks, really. I just want to build skills. I’ve managed to play guitar for 3 years without having the market judge its value, but I could care less. I play guitar for myself and sometimes my friends, and I do it because I care about its ‘value’: to me. I don’t need to go busking to determine that.
Bow hunting skills?
I think it would be worth you while to learn some economics. Comparative Advantage would be a good place to start. Your values are valid but you should be fully aware of your choices.
I think you underestimate my knowledge of economics. I know about comparative advantage, marginal cost, diminishing marginal returns, Pareto frontiers, et cetera. I took AP Econ and folk at SIAI use the terminology quite a bit.
I totally have bow hunting skills! But not nunchaku skills… :/
I apologize, I tend to think that people who think their own academic accomplishments are significant factors in their future salary are probably confused about the way the world works.
I also expend significant effort on unmarketable skills (snowboarding in my case) but I don’t expect anyone else to fund me for it. We live in a market economy; figure out your comparative advantage and negotiate the maximum price you can achieve for it.
Or, like, not. I totally realize that’s what I would do if I wanted to make money, but I don’t. At least for now, I only care about unmarketable skills. That’s why I have so many of them. It was a mistake to write this post in the first person; I’m sorry for being misleading. But I’m not actually looking for employment. I have employment opportunities already, and things to do besides.
Money is not only the unit of caring, it is the unit of exchange. It is not straightforward to trade money for time however (at least by the hour) so you are comprehensible. I’m sorry if I offended you.
Especially if you are in a country where that kind of thing is illegal.
Making money is not my comparative advantage. :) Really, though, I intern for SIAI, and when I’m not doing that I’m building skills so that I’ll be better able to work for SIAI, and when I’m not doing that I’m building skills that are related to intelligence amplification research. That is, at least for now, my comparative advantage: there’s no easy way for me to make enough money to pay someone else to do it better than I could. Volunteering at SIAI for a year gave me a lot of domain-specific knowledge.
You didn’t offend me at all! Sorry, I didn’t mean to sound bristly.
Want some brutally truthful tests designed to see how competent you are?
Take the SAT test, , which measures math ability, and verbal ability. Find a few psychology tests that try and measure memorization ability(like, how quickly and well you can memorize a topic)
Why? Because real world success, in intellectual endeavors, is largely a combination of how large your fluid intelligence is+memorization ability+ work ethic. The rest is due to combos of other factors.
Besides the SAT, you can take the LSAT, and study for a few things on there that require specific knowledge. The test is the single largest predictive factor of success in law school, and blind tests of competence.
There are a few other tests you can take. I recommend the AMC, which requires studying some topics outside of the regular school curriculum, but not too much.
Or, you could play starcraft for 3 months, and see how high you end up ranking.
Beyond these,I don’t know of many good tests to see how competent you are.
Are you joking? Starcraft isn’t even a well-designed game—it has all kinds of crazy barriers to entry and elements that explicitly exist to make it unnecessary difficult for people to pick up. Besides, it’s easy for even a bad gamer (see: me) to achieve a high-looking ranking (top 25 Diamond) in Starcraft II thanks to its nonintuitive rating and placement system, and true rankings are only maintained for the top 200 people in each region.
Yeah, I’ve done many of those. I took the SAT when I was 12. I’ve taken a few probably-inaccurate online IQ tests. I’ve done a few cognitive testing suites at SIAI. I’m in pretty good shape. In general though, there are better frameworks for cognitive testing. It’s probable that one could make a neat suite out of PEBL, which is free and very customizable. Fluid g seems over-emphasized. The limiting factor for most rationalists tends to be strong metadispositions for thought, reflection, and drive.
They have those?
They’re ad hoc, we’ve used one for a dual n-back study which ended up yielding insufficient data.
Any chance you could write up that study? I don’t believe I have seen any SIAI-related DNB study; certainly it’s not in my FAQ.
(Remember kids: only you can fight publication bias!)
We didn’t study long enough to get any statistically significant data. Like, not even close. And I think sending off the data (even without names attached) would sorta breach an implicit privacy agreement among those who took part in the tests.
Jaeggi 2008 didn’t necessarily study very long either, some around/less than a week.
(I wouldn’t be asking this question, by the way, if you had written more concretely and said something like ‘We only studied for 2 days, not long enough to get any statistically significant data’.)
Hmm, most people would be ok with that sort of data being sent out in an anonymized form. I’m surprised that you didn’t suggest that before hand. Is there any chance you can contact the people in question and get their permission to release the anonymized data?
We could, but really, there’s no information there, no matter how much Bayes magic you use. It’s noise. If the data was at all significant then we’d send it out, of course. We might actually have gotten anonymized disclosure agreement from everyone; I don’t remember. But it didn’t end up mattering.
Shouldn’t doing something successfully in the real world be in there somewhere?
and wealth.
Read “the bell curve”
basically, smart parents were more likely to go to a higher ranking school, and move themselves up in the social heirarchy.
Smart people tend to have smart kids. Dumb people tend to have dumb kids. Hence, the scores.
For the race aspect of this, you can find the stats where poor east asian kids do better than rich white kids.At least on the math portion.
Yeah, but that only matters from a self-assessment standpoint if the causal graph is wealth --> score <-- ability, whereas for an uncoached entrant it’s almost purely wealth --> ability --> score.
Fair enough.
And coaching can’t make up a large part of the score difference, either. There’s more than 100 points discrepancy on Critical Reading or Math alone between the lowest and highest income groups, whereas coaching only creates improvements of 30 points in Reading and Math combined.
A major problem with applying this point of economics is that most employers haven’t really got the hang of it yet either. It is a sad rationality fail to be focused on what you could have accomplished if your potential trading partners themselves were only more rational (unless you can actually make them more rational).
If you can find employers who understand this, more power to you.