In my introduction post, I mentioned that I'd be posting about programming from time to time. I haven't done much of that yet, so...no time like the present.
Not Much Coding, Lots of Learning
Lately, I haven't been doing very much coding outside of work (and I'm way behind on Hacktoberfest). But what I have been doing is learning some new stuff, which, in my mind, is just as important.
Crystal
The first big thing I've been working on is learning the Crystal Programming Language. Crystal is a pretty cool language; its syntax is a lot like Ruby (which I use a lot at work), but it has static typing and it compiles to native code. That means it's a bit easier to detect errors in the code you write, and that your code will ultimately run very fast.
I'm learning Crystal using lessons provided by grox.io, which is a pretty cool site. It's run by Bruce Tate, the guy who wrote the Seven Languages in Seven Weeks series of books. On this site, he follows in the tradition of those books, by providing a series of 2-month mini-courses on programming languages that are selected by students (using a majority vote system). Unfortunately, the site isn't free, but it costs $10/month, which seems pretty reasonable to me.
The grox.io lessons play to the same strengths as Tate's books. They start off with a quick introduction to the new language's syntax, and then they dive deeply into the features that make the language unique. In the case of Crystal, Tate is initially concentrating on Crystal's type inference system, which is very well-designed, even if it's not super innovative compared to other modern languages like Rust or Kotlin.
My impression of Crystal so far is quite positive. It retains the elegance of its Ruby-like syntax, while providing everything you need for fast, native applications. Also, the language designers have not been afraid to deviate from the Ruby syntax where it makes sense to do so in a statically typed language, so there aren't awkward conventions like you see in some languages that try to "look like" dynamic languages.
Artificial Intelligence
The other thing I've been doing lately is even bigger: I'm starting in on a series of nanodegrees over at Udacity's School of AI. I had been debating for a long time whether to go that route, because, while Udacity has some of the best MOOCs out there (at least in my opinion), they're also not cheap. I finally decided to bite the bullet, pull out some savings, and enroll.
I only started the first nanodegree a few days ago, so I'm probably not in the best position to review Udacity's nanodegree programs yet. So far, I'm mostly doing some Python review, since that's the language they use throughout their AI classes. But it's very cool to see all the support that you get for your money at Udacity. You're assigned a "mentor", who helps you figure out a lesson plan and how best to make use of the resources you've got; and there are professional project reviewers who grade the projects you complete in order to graduate. Not only do the reviewers check to see whether your projects work, but they provide feedback about your coding style, whether you're achieving the project goals in the best way possible, and so on. I'm looking forward to the first project and to having it reviewed.
One thing Udacity is really big on is career resources. They have staff to help you with your resume, your Github account, your LinkedIn profile, and so on. So I think my Udacity mentor was surprised during my first call when I said I wasn't looking for a new job and I wasn't trying to get a promotion at my existing job--that I was just doing the nanodegree because I was interested in the subject matter.
The amount of surprise that I got from my Udacity mentor made me think...
Why Learn, if Not for a New Job?
Actually, I have some pretty strong feelings about this. As a software engineer, and just as a human being who tries to take an interest in the world around himself, lifelong learning has always been really important to me. Maybe so much so that I forgot the reasoning behind it.
A big reason that I spend a lot of my free time learning stuff that I may never apply at any job is just that it keeps my mind sharp, and keeps me thinking about new things. As a software engineer, and one who's been working professionally for 20-something years, I realize how easy it is to fall into a rut with your thinking. I know lots of people who are at the same point as me in their software engineering careers, who have just sort of given up on learning anything new. They've carved out a niche for themselves, have a stable job that they may be able to ride out all the way to retirement, and don't see any need to stretch themselves.
I never, ever want that to happen to me. For me, writing code is not just a vocation, but a passion. If I'm not continually challenging myself to think in new ways about the programming I do, I worry that I'm going to stagnate and end up just writing the same code over and over for the rest of my career. And that's pretty much the scariest thing I can think of.
I do this outside of programming, too. I like to take online classes, or watch lectures, or take courses at local universities in subjects outside of programming, and of computers altogether. Maybe I'll write about that in a separate post sometime.
I also don't want to come off as judgmental. Everyone has different ways of living their lives, and different passions that they want to pursue. Some software engineers I know who have stopped actively learning new coding skills are devoting their non-work hours to other things: spending time with family, writing novels, all kinds of stuff. More power to them! I do what I do because of what I feel passionate about. (I also realize that, since I don't have kids, spending time with family has a different priority for me than it does for a lot of people, and that's cool too.)
What's Next?
This post turned out to be more about my philosophy in life than about nitty-gritty programming details. I hope you enjoyed reading it, but in the future I'm hoping to mix more code into my "coding diary" posts. With all the programming I'm doing as part of my learning efforts, I don't think that will be too difficult.
In the meantime, I'd love to hear what you think about lifelong learning, new programming languages, AI, and whatever else. Go ahead, comment and let me know your thoughts!
Regardless of whether or not you are learning for a job, it is an interesting topic.
Life long learning is a great goal.
True, there's nothing wrong with learning something in order to get ahead in your career!
Keep the passion alive!
#commentraid
Thank you! I will! 🙂
If you like ruby, maybe you'll enjoy learning about how to access the Steem blockchain using ruby:
https://developers.steem.io/tutorials/#tutorials-ruby
One of my favorite topics is content patching:
https://developers.steem.io/tutorials-ruby/edit_content_patching
When we do edits on the blockchain, we can isolate the exact paragraph we want to amend. I like how the blockchain team took the time to implement this little feature early on because it allows app developers to efficiently amend content.
Thanks, this was super interesting to read!
I've been wanting to do something with Ruby and Steem for a little while now. I just need to think of an interesting idea...
Thanks for using eSteem!
Your post has been voted as a part of eSteem encouragement program. Keep up the good work! Install Android, iOS Mobile app or Windows, Mac, Linux Surfer app, if you haven't already!
Learn more: https://esteem.app
Join our discord: https://discord.gg/8eHupPq
Congratulations @zyzzyva! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :
You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word
STOP
Vote for @Steemitboard as a witness to get one more award and increased upvotes!
This post was manually curated by @upmewhale, in combined efforts with the eSteem curation team to bring further support to our valued Steem community! Post curated, courtesy of @horpey
~ eSteem Curation Team
This post is manually curated by @dblog.supporter.