
A guide to Ruby programming covers such topics as datatypes and objects, expressions, classes and modules, control structures, and the Ruby platform.
First, first started with a web-page summer class in middle-school. We learned HTML and a tiny bit of CSS/JS, all handwritten in Notepad and copied and pasted into Geocities (c. 2002)
I was strong in math and science at a young age and wanted to be an astronaut, but wearing glasses, I decided being an engineer (of some sort) would be better.
In High School, I went to an engineering Magnet school, so I got to play with Lego Mindstorm and other robotics. We built a solid-state rocket that broke the sound barrier and I helped program the beacon used to help find it when it came down.
Between high school and college, I picked up "C++ for Dummies" and while I didn't learn much, it at least introduced some concepts (like pointers and classes) and syntax.
In college, the books I consider the most influential were: "The Pragmatic Programmer" (that's a career-defining book) and my favorite languages were C ("The C Programming Language" by K&R) and Ruby ("The Ruby Programming Language" from O'Reilly).
For today's programers, I'd suggest Python (it's ubiquitous, and perfect for learning and building fundamentals) and/or JavaScript (also ubiquitous for working with the web).
> What is your experience with university? Did you get a degree, was it worth it, do you think it helped you find work, what did you love/hate about uni?
I went to a state college (Texas Tech University) because it's what my family could afford. I got into more prestigious colleges (MIT, NYU) but would've had to take on massive college debt as I didn't qualify for much financial aid nor many scholarships. (Not rich enough or genius enough nor poor nor dumb). I still decided to make the best of my situation and replicate the MIT EE/CS program by dual-majoring in Electrical Engineering & Computer Science.
I'm really glad I did EE/CS dual-major b/c it gave me a full spectrum of understanding: from electrons->fields->gates->circuits->low-level architecture->operating systems-> C -> C++ -> Java -> Python -> Lisp
Also at the time, CS wasn't as solid of a career path after the dot-com bubble. It was honestly nice to have an EE degree as a "backup" and I also did most of my programming for my EE lab work.
Given that I made the frugal decision to stay in-state, take on minimal loans by living at home, and got two degrees out of 5-years, and the college really helped me find my first job through career fairs (even in the tail-end of a recession), I would definitely say that a degree was worth it. I was also the first in my family to ever graduate from college, which was/is a major source of pride for me and my family. I also met my fiancé-now-wife in college and other life-long friends. I worked through college at the college IT dept as well, in addition to my 15-18hr course load. This got me tangentially-relevant work experience. College and work taught me how to study and work efficiently and effectively.
There's definitely a larger no-degree movement and I would never say you need a degree; there's also a lot a degree entails that is nonsense.
My EE & CS classes were worthwhile and taught me the most fundamental concepts of programming: language (as in language design, compilers, interpreters), functions, recursion, pointers. You really understand "the stack" when you build C-function calls in assembly. You understand compiler errors better when you've written one. Again, not saying you need to go to university to learn these things; just sharing that these parts were what's valuable.
> How did you get your first paid work (family & friends, internship, freelance, full-time)?
Career fair and interviewing pretty much my whole last year at uni. I already had an internship, which also greatly helped.
> What do you do now and what do you love/hate about your job?
I'm a senior software engineer. I love the coding and the scale and scope at which my work applies. I can launch features to literally millions of people and help generate hundreds of millions of dollars in donations. I get to learn new concepts and apply them.
I love that I pretty much set my hours, I work comfortably indoors. I work remotely, so my gym, my dog, and my wife are just a room or two away. I don't like office nonsense (arguing over fridge space or who filled the coffee or what did you do this weekend), so remote is fantastic. And I
love* the pay.I hate the inefficiencies and bad politics, but that's just part of white-collar work. When people would rather feel right or appear smart than be right or smart. When metrics are given priority over substance; when how something is measured is prioritized over what the measurement was meant to represent (an analogy would be chasing a higher credit score while you're in deep debt to your family or losing weight by cutting off a limb). Long-term results are sacrificed for short-term gains.
I'm happy to share more.
* My opinions are my own and not my employers. I don't speak for them nor they for me.
To give a bit of history of myself and programming languages, I first started as an EE/CS major working with ASM/C/C++/Matlab for EE and C++/Java/Lisp for CS. Up until graduation, it was just a given that programming languages were just a concession given to you so you didn't have to write assembly. OO in the form of C++/Java was the "better alternative" to imperative C. Lucky me.
Then I heard about Ruby and Ruby on Rails. After reading "The Ruby Programming Language" and working through the examples, I was blown away by the idea that a language could be for a programmer and be a way to express ideas rather than something we translate ideas into. Metaprogramming and mixins and Procs oh my.
Then I started working through Project Euler questions with Ruby and it all came crashing down with the reality of Ruby's runtime. Ruby gave me expressiveness but just could't give me the speed of my equivalent C/Java code. Granted, I was definitely doing very sub-optimal algos but even then, C/Java just didn't care and gave the answer in seconds, not minutes.
Since then, Java & JS have paid my bills. I've seen the popularity of Ruby die as Rails fell out of style when Twitter moved away.
I've messed around with Crystal, trying to work through the problems in "The Go Programming Language" in Crystal and finding that Crystal is a beautiful language and fast as hell. That said, there's always a trade-off right? Crystal's trade off is in compile time, especially with --release. However, I think that's a reasonable trade-off since your release builds should be on a beefy server and it could save you $$$ if it means your actual production servers can be lean as hell. That said, I'm also aware that this problem is exactly one that the Go language was meant to address (C++'s exponentially growing compile time).
Crystal definitely needs:
1. IDE/Debugger support, understandable for a new language, but the language should be "finished" and tooling needs critical attention
2. Libraries. The classic problem of any new language.
3. Major sponsorship (would greatly help with point 1 & 2)
http://www.amazon.com/Ruby-Programming-Language-David-Flanag...
I think it's the most relevant Ruby book, because it documents the basic thinking and mental approach of the language, which is actually very stable.
http://shop.oreilly.com/product/9780596516178.do
Know the fundamentals.
The language is now at 1.9.3, and while things are fundamentally the same there are assorted little differences.
Still, as a free intro to the language it's not bad.
If you want to buy a book I'd suggest The Ruby Programming Language, as well as anything by Gregory Brown or David A. Black.
Greg also produces the Practicing Ruby newsletter which I cannot recommend highly enough.
Greg does amazing stuff.
See also http://university.rubymendicant.com and http://blog.rubybestpractices.com
A great second book (maybe even first if you're comfortable enough learning basic syntax on your own) is Eloquent Ruby by Russ Olsen.
