Mar 13, 2018
Post originally shared on dev.to http://bit.ly/2tEeKg9 minor edits for clarity here. A few months ago I made the hard switch over to running Linux on my work laptop and haven't looked back even once. I've been a windows user since 3.1 and never jumped onto the Apple craze, I like Apple's products and use my wife's MacBook on occasion but mostly stayed with windows as I'm a gamer (not trying to start an os war). I liked Windows, was familiar with it and didn't really have a desire to change. I messed around with Linux on occasion growing up running it parallel to windows but as I wasn't really into programming and was always into gaming (Shame on me for wasting my youth on King's quest and Total annihilation) as a result I never really made the plunge. Last year I got into programming with the idea of switching careers from E-commerce data analytics and project management into development and started teaching myself to code on windows 10. I love windows 10 and use it as my nonwork OS but I kept bumping into hiccups when I wanted to install or run things. C was a beast to get installed on Windows and it always felt like there was always an added layer of stuff between me and coding no matter what code I worked on. Coding is hard enough as it is and I was getting frustrated. Early last year I was working through Zed Shaw's "Learn Python the Hard Way". He recommended that I learn the command line and had a quick tutorial to get into it. I fell in love and immediately switched over as much as I could to use the command line and manually configured my Powershell to run my stuff. Nostalgia from DOS notwithstanding it was just fun using the command line to navigate and easier than I had always assumed it would be. (I'll note that configuring PowerShell is not fun) Last year something remarkable happened. Microsoft actually allowed BASH (born again shell a popular shell and command language) and a Linux instance to be run on Win10 and I started messing around with it. I was sold, I could run nearly all my languages from the same shell with almost no effort. I could install python in a few keystrokes, run a c program and then run a python program with almost no effort at all. The only problem was that I was doing all my work on a Linux environment inside of windows and it was annoying to get my code into more normal work flows in windows and onto Github desktop which I started using around that time. So after a bunch of procrastinating, I finally grabbed all my code off my windows 10 work laptop and installed Ubuntu Linux. Overnight my work flow improved drastically and now I almost prefer using my work laptop for personal everyday use. I would heartily recommend that anyone who does any coding switch to Linux, the ease of use, the simplicity of installing and working with tools is incredible. Once again I love windows 10 but Linux is slowly stealing my heart. I do recommend that if you switch to Linux to start with Ubuntu and try a different flavor of the OS as Ubuntu is extremely easy to work with. I did not like the setup and desktop of Base Ubuntu though so I am using plasma Kubuntu and loving it. There are a bunch of great Linux Distros though such as CentOS or ARCH. I'm just recommending ubuntu/Kubuntu as its extremely easy to get started on and its very popular and well supported if you need some help. Plus you can download it to a flash drive and demo run it from the flash drive without having to install to get a feel for the OS. I am currently using the following setup to run most of my code and work tools. OS: Kubuntu 16.04 Desktop Flavour: KDE Plasma Version 5.8.8 (much prettier and UX friendly vs base Ubuntu In my opinion.) Web Browser: Chromium and Firefox Version Control: Git with the GitKraken desktop platform. Shell: Konsole (Bash) Text Editor: Primarily Atom and occasionally vim(getting the hang of it slowly), Emacs Image Editor: Gimp IM: Slack desktop or Google Hangouts Languages I'm working with: C, Python3, Ruby, Clisp Word Processor: Mostly Google Docs with Libreoffice installed for the heavy stuff. The only thing that I do miss is the windows version of notepad++ I haven't found a Linux version that is exactly the same but that's a small price to pay for the faster time to get into my flow, faster and easier installation of software and overall better experience that Linux has brought me. In addition I can do server work easily, completely customize every part of my desktop, easily setup keyboard shortcuts to run programs or scripts (Windows 10 can do this somewhat as well) and can install the C compiler in one short sentence(I can't emphasize enough how easy installing programs is on Linux, most programs are a single sentence typed into the console and a quick "y" press to confirm installation.) I hope this is insightful and encourages someone else to make the jump into Linux for doing development work, I have enjoyed the OS so much that I'm actually taking courses on Linux administration and working on becoming a power user. Something I never felt inspired to do on Windows. Thanks for reading and keep on Coding.
Mar 13, 2018
I hope this is encouraging and useful to someone reading this. Programming is hard but it's absolutely worth it. I love how it feels to hate something for its difficulty and then later love it because you finally got it and can now do amazing things. I love how precise and yet imprecise coding can be (Floats anyone) and the joy of typing a bunch of symbols into a keyboard and hitting refresh on a web page and seeing your creation come to life. I've been teaching myself to code over the last year and here are a few of the insights I've learned along the way. I hope it helps you out. 1. Be willing to throw away everything, the best, right solution is all that matters. This goes with everything from code to languages to ideas. Programming changes so fast and theirs so many amazing ways to approach problems that its important to remember that the solution is the reason for programming. Its all about solving the problem and never about the journey. It’s super easy to get angry or defensive when you’ve spent 2 days coding something or building a page and someone walks by and points out a faster/better solution. If you’re focused on the best solution it helps make throwing that code away so much easier. I recently had spent 2 days working on some flex boxes for a project and my business partner (totally non-techie) decided that not having that feature would be better for our client's vision. My instinct was to get mad and want to keep the code in anyways but a few breaths later and thinking it through and I realized my partner was right. Plus if I'm honest, my clients could care less how many hours I worked on x cool widget or how beautiful the code of y doodad is. They just want their product the best it can be. 2. The language your learning doesn’t matter as much as everyone says it does. I’ve never been a fanboy of a particular technology, I love windows 10 and have a separate equally loved laptop running Kubuntu. I even enjoy using my wife’s MacBook. I approached languages the same way and am grateful I did. I decided to learn a few languages I need in my business (HTML/CSS/JS *I know html and CSS aren’t true programming languages.) and then I’ll pick a few I want to learn, (SQL, Python, Perl, Java) and then I added C because I wanted to fill in my lack of a compsci degree a little with a more fundamental language. After all of the studying and reading, I’ve learned that there are a place and value for all of them. Unless you having a pressing need to learn a single specific language than play with a few and find out what feels right. Which language flows when you use it. Then learn it no matter what popular culture says about it. If you have a passion for assembly than that passion will take you farther than a slight interest in python any day. 3. Programming really is as hard as everyone says. When I started out I truly thought that I was a super genius who could figure out everything in a few hours of study. C and CSS have humbled me. The days I’ve spent on trying to figure out even basic CSS concepts is embarrassing and I’ve hence changed my tune to “given enough time, stack overflow, documentation and forum posts from 2009 I can figure anything out.” If you understand that programming is hard and you approach it as such I believe you have a better chance of not quitting and it's tempered how often I get frustrated. Now instead of frustration at every error or broken page, I understand its part of the process and get frustrated less. I only swear now after having been unable to find a semicolon after more than 4 hours of searching at 3 am in the morning. (this is a lie, I swear anytime I use CSS which is almost daily.) 4. Try different learning methods. I started out with books, then online text courses and was really struggling, I tried forums but was so new that I didn’t even know how to ask questions properly. I finally grabbed some video courses and things really started clicking. Be willing to try other mediums of learning. videos, books, Courses online, Forums and even coding games and such all are amazing tools and if you can try to learn to use as many of them as your comfortable with. If I had stuck with books only I would be so frustrated and might have quit programming outright. I had never used videos and don’t like them for most other learning but for coding, it's amazing to be able to follow along and pause right next to the instructor. I learn best by learning concepts as a whole so I jumped into learning 7-8 languages all at once. I absolutely understand that this is generally a really bad idea but for me, it worked. I have now settled down into 5 consistent languages I'm focused on and the rest are just for dabbling in for fun. I am lightyears ahead of where I would have been learning just one language at a time. I also get bored easy so I probably would have quit learning together but being able to switch from web dev to building an SQL database to reading about pointers in C to learning Git. It was a lifesaver for me and helped me get past that initial learning hump and stick with programming. This worked for me but it might not work for you. My point is that it's worth experimenting and trying different things no matter what others may say. 5: Try everything you can and then pick what is most comfortable for you. I love trying new text editors, its a sickness. I can’t tell you how many different Linux distros I tried before settling on my current one. Be willing to try different things and if you like it and you're productive than rock it. Don’t let anyone else tell you what's the best editor or operating system or even language. Just try it out. I ’ve fallen in love with things that are very counterculture in some things (I love PHP, I can’t help myself) but I also have followed the crowd in other things because the crowd was right. (Linux for development has changed my entire workflow for the better) Try it and if you like it keep it. Never stick with something because some random person on a forum or tech blog said that its the best thing ever. 6. Stay Humble, This is tough but being humble and willing to listen to others and approach others with humility is priceless. I haven’t had a lot of luxury of working with other developers and most of my clients do n’t know or care about code at all. I have to remember that I've just chosen to learn this skill set and that I’m not god’s gift to mankind. I learned before I got into coding what it was like working with developers or programmers who didn’t have great communication skills or who were arrogant. It was never fun and most of the time resulted in neither party is happy with the end product. On the spin side working with a team focused, humble developer or coder is absolutely amazing and the team can do really cool things. It's super important to remember that the person who can’t figure out how to turn on their computer might be an absolute genius in another field. Keep focused on being a team player and work on building leadership and communication skills and everybody wins. I’m new enough that a semicolon can humble me on a weekly basis, however, I already notice times when I have approached a conversation with an exasperated “why can’t you get this simple concept” attitude. It's easy to forget that the “simple concept” took days or weeks of study to understand. EGO IS THE ENEMY >>>>> Last Thoughts<<<<< I hope this is encouraging and useful to someone reading this. Programming is hard but it's absolutely worth it. I love how it feels to hate something for its difficulty and then later love it because you finally got it and can now do amazing things. I love how precise and yet imprecise coding can be (Floats anyone) and the joy of typing a bunch of symbols into a keyboard and hitting refresh on a webpage and seeing your creation come to life. I don’t know of many other fields that allow for the creativity, problems solving, extreme hatred and absolute love of the same concepts and keep me up all night working on some silly personal project like programming and web development does. Thanks for reading and keep on coding!!!