Today is the 2nd of January and I’m as busy as ever. I wanted to make a blog post a couple of weeks ago but completing my assignments has taken all precedence in my life. I’m nearing the end of my first two classes and will have a week off before beginning another two classes. I’ll be sure to post more about the new classes once that happens.
I’ve covered a lot of material in Java since my last post. I doubt I’ll be able to rehash it all here effectively. The high points were:
Making a linked list and reversing it.
Creating an array of objects and sorting them based off of field values inside those objects.
Building a password checker that asks twice for a password and then tests it against various criteria such as password length and if it contains a letter or number.
When I have time I’ll try to write more about the projects but I can see that coming back here to write about past topics probably won’t happen. All I’ve been doing is writing about how I wish I was writing more and how I’ll pledge to write more in the future. Seeing how this hasn’t helped me out yet, I’ll just stop with all the disclaimers. I’m hoping to write again either before my next classes start or shortly afterward. I guess we will find out soon enough together.
Since my last post, classes have began and I’m back to doing homework. I’m studying databases and Java. This is my first class on databases and my second course on Java. The time I’ve put into practicing Java so far has paid off. I seem to understand and possess the vocabulary to describe the problems and solutions. I’ve increased my reading so that I’m actually working ahead on the next week while still having a couple of days remaining in this current week.
Back to school, Back to school…
Keeping this blog in mind, I’ve had an idea to collect the solutions I find and share them. I’ve began to use Google Keep, although I’m not the biggest fan, to collect websites that I find solutions on. My plan is to blog more about the problems and solutions and less about my personal opinions, although those will likely seep into my writing. School is keeping me busy but part of my coursework has me creating forum posts to other students. I’m hoping that all of this writing will help me to express solutions easier.
To give an example of what I’ve been collecting, I’ll share a couple things that I had hoped to blog about prior to starting school:
I have been using MacOS for about 6 years now and sometimes I mess with Raspbian on my Raspberry Pi. One of the issues I’ve always had was understanding the documentation on commands in the terminal. There is a nice command call “man” that is short for manual. You can type man followed by any terminal command to read the manual or documentation for that command. While I’ve known about this command, the way these manuals read is very confusing. After years of faking it, I decided that I really needed to finally understand what was going on with the display of commands and parameters.
If you open up Terminal and type “man ls” you will get the manual page for the ls command which is short for list. The list command will display all the current files in a directory. You can even supply parameters to change what is displayed such as showing any hidden files that are located in that same folder. To find out what parameter you should supply, you need to review the manual for the ls command. I previously didn’t understand the optional parameters and notation used in the manual page.
The man page for the command ls
When it came to my lack of understanding, I didn’t understand the parenthesis, brackets, or the tags used in the man pages. Rather than continuing to shy away from the man pages, I decided that enough was enough. I did some searching and found out that parameters shown in parenthesis are optional. Limited choices are shown inside of brackets, and mandatory parameters are enclosed inside of the greater than and less than symbols. ex: <mandatory> Now that I took a few minutes to understand the format of the man pages, I’m much more efficient that ever before. This was one of those holes in my knowledge that was really preventing me from moving forward.
The other resource that I’m Google Keeping, is a video on How to Begin Thinking like a programmer. This video isn’t brand new by any means and I’d watched it once in the past and forgot about it. It wasn’t until my failure to create a password checker program that I realized I didn’t understand looping and strings very well. This video gave me the loop piece that I didn’t get. The “KeepGoing” loop.
The KeepGoing loop starts at 51:05 towards the end of this video.
The KeepGoing loop showed me how to build a while loop that used a boolean toggle to exit. While the code doesn’t seem very complicated now that I understand it, trying to reach this point using a For loop or other while loop just wasn’t working. There was a simple elegance to this solution that I was making more complicated than it needed to be. I also needed time to study my textbook on the while loop. Far too often when facing a school deadline, I would just work on the problem without completing enough of the book problems. Since the book problems don’t earn me any credit, they were cast aside for the main problem that would get me credit.
As I continue to work on Java programs and other tech stuff at work, I will add relevant links to my Google Keep. When I get a free hour to blog I will list off the latest pieces to the puzzle. I hope that in tracking these solutions I can blog about topics that would be helpful to other learners. Helping other people learn isn’t my direct goal right now, but if I can contribute to others while maintaining my own journey then it’s extra icing on the proverbial cake.
So I started off my blog doing pretty much the worst thing you can do. Not blogging.
When I last wrote it was near the end of May 2019. I was just starting a summer vacation. Since then I’ve came back and started another year of work. (My day job revolves around the school year whether I’m taking classes or not.) In September I visited some friends and also flew to Seattle to see family. It’s now October 14th as I write this. Where have the past 141 days gone?
The most important thing that has happened concerning my technical journey is my decision to go back to school sooner rather than later. Classes begin on November 4th. Intermediate Java and Databases followed by Spring MVC and more Databases. I will be finished with these classes by the end of March 2o20. I’ve already informed my parents and in-laws that I won’t be attending Thanksgiving or Christmas this year. Depending on my next set of classes after March, I might not make Easter in 2020 either. (My school meets on Christmas Day and all other days. It doesn’t care.)
I wish that I could say I’ve spent the past 141 days going all out on studying Java and Databases. I’ve continued making programs with Java but I’ve probably only made it another 100 pages in my book during this time. I’m not proud of this fact, but I’m here today doing more than ever. I spent a good portion of this time organizing and preparing for school. I signed up back in early September and I’ve been preparing since. My office is just one recycle day away from being ready. I could probably use a new chair but I’ll have to make do with my old chair for now.
One continued challenge has been phasing out computer repair. While I don’t advertise, I still end up bringing home stray computers. I’m always saying that I won’t fix another computer but then I find myself fixing someone else’s computer. (I’m a big hit at dinner parties!) While I’ve stopped fixing most peoples computers there’s always a call from a relative or friend of the family. I’m currently waiting on a new wireless antenna for a Lenovo Yoga laptop. Then this will be the last computer I ever fix. I wish.
Once school begins, my plan is to blog once a week as a way of debriefing myself. Provided classes don’t become too much, I should be able to adhere to a weekly post. Until school begins I’ll be studying ahead as much as possible, mostly in Java. I will read my Database book prior to the first day though. Reading as far ahead as possible is now mandatory.
Welcome to my renewed journey through software development. I started this blog to help myself become a better programmer and ultimately a better person. I’m not expecting many people to read these posts, but knowing that you could, encourages me to write as well as I’m able. So I thank you for your assistance. Now I’m going to share a few thoughts about where I need to go and how I plan to get there.
To finish my bachelors degree, I need additional study time with Java, and SQL. I also need to study the Spring framework which is also known as Spring MVC. Using Spring, my application will eventually serve html pages and interact with them. Knowing the concepts of Spring, I’m going to use FreeCodeCamp.org to re-orient myself with the front end. I haven’t messed with vanilla JS much, only a little jQuery so FCC’s JS and algorithms section will help. I also think that some review of C++ would be fun, however my schedule is already overbooked. Java needs to be my primary focus. C++ will have to wait for now.
I have my Java, Spring, and Database books to read. I also have Tim Buchalka’s Java Programming Masterclass on Udemy. Combine this will all Free Code Camp work and I’ve got a mountain of tasks to complete. If anything, I’ve got too much work to do and I should consider more focus. More focus = more Java at this point. Java is the foundation the rest of my application will build on. After some time or when I want a break from Java, I can start mixing in the other pieces.
Now that I’m focused, I need to set some goals. What should I accomplish each day? Each week? Each Month? My schedule varies, especially now going into summer. My regular schedule allows for 2 hours of study each day, with a potential 3rd hour over my lunch break. On days I’m not working, I should be able to devote 4-6 hours. I could push for more, but I’m looking for consistency across days. Once I’ve logged some 4+ hour weekend days, I’ll be able to evaluate if the increase the time will be help on non-work days. This should allow me to spend about 20 hours a week on my training.
With 20 hours each week to spend learning, I should be able to finish a chapter in my Java book each week. I should note that I complete all of the problems at the end of each chapter including the two different team exercises. I’ve found that insistence on completing each problem is agonizing but highly educational. I should also complete several code camp modules or units each day. If I’m unable to complete 10 modules of front end each day, I don’t deserve my keyboard. Perhaps a monthly review and reassessment will be in order by the end of my first month. I’d like to make all sorts of positive claims here, but realistically, I need to get through week 1 first, followed by month 1. To make a realistic and positive claim, I should finish my Java book within 2 months time.
Tonight I’ll rest knowing that in the morning, I’ll begin by executing my plan. I have several pages of Java to read and example projects to create. When I need to switch off, I’ve got FreeCodeCamp.org’s front end development section to review. If that isn’t working, I’ve got my Java class on Udemy or a database book to re-read. Any problems I encounter certainly won’t be because I was lacking a variety of topics to study. Staying focused on Java will be the main objective and my personal challenge.
I’ve had an on again, off again sort of relationship with programming ever since elementary school. I’ve picked it up, thrown it down, stomped on it, and picked it back up again. I’m here to share my journey through technology and how I’ve ended up back where I started multiple times now. What has changed this time, is me:
Apple II – My first programming experience
In 1993 at the age of 7, we had dial-up internet at home and were very likely the first people online in our county. My father had a QVC late night ordered IBM clone desktop. This bad boy ran DOS and Windows 3.1 on an i386 processor, 64mb of hard drive space, and some negligible amount of memory. In ’95 we ordered two Gateway 2000 computers with the first Pentium chips at 200 Mhz. These milk cow colored Ferraris came with Windows 95 and newer dial up modems. They had graphics cards and sound cards along with the holy grail 12x CD rom! Remember that new computer games back then wouldn’t run on a lowly 2x or 4x drive. Microsoft’s Close Combat would go on to spin violently inside while my brother and I made jokes about the disk exploding.
My first PC that I bought. $2500 – Same time Apple II installed at school.
It was during 4th grade, and most likely the winter of that 95/96 school year, that my Elementary school installed two dozen Apple II computers. Our Music room had its walls completely lined with strange computers. It was an odd sight to discover one day as we all came in for Music class. We found out later that we would get to use the Apples as part of a special project. I don’t recall which class or time period changed in our schedules but for a month or two we would spend time working on these green-screened, mouse-less computers. (I can see now where my PC elitism over Apple products began at an early age.) (Full disclosure: I’m writing this today on a MacBook Air.)
During our time working with the Apple II, we learned to use some commands and supply values with those commands. I can’t remember if we used a graphing program or if it was some sort of compiler but we made a list of commands that rendered a road and eventually a city. The road had 2 solid lines and a dashed line down the center. Using these line commands and some values, we eventually rendered a city scape above the dashed highway that cut horizontally across the bottoms of our screens. Included with the program were some sort of stamps or symbols that could also be inserted into our city. I think there was a bus object we put on the highway and maybe an airplane object that we positioned in the sky above our buildings. We would save our creations onto the 5-1/4″ floppy drives each day and then return to work on our designs by loading our floppy disk into the dual drive Apple II.
As our time with the Apple II ended, I quickly forgot about my first programming experience. Video games, the internet and High school all happened. Did I mention Video games? It wasn’t until many years later that I even remembered my time spent in 4th grade writing a list of commands to render our little city scape. You see as a young man-boy fresh out of High School, I knew everything. I knew that I was going to be a millionaire by age 25 and retired at age 30. Somehow my life as a rural country kid, was going to transcend into riches simply due to technology existing and me being awesome.
I threw away my opportunity at a university and instead choose my local community college. I wasn’t sure what IT was, but it had something to do with computers. I was deleriously in love with a local girl who shortly after starting classes, wasn’t in love with me. No matter, I was only slightly delayed on my path to glory. You see, I had chosen to take the “Programming” tract of the 2 year associates degree in IT. Success was just a few weeks away surely.
In 2007, after 3 years of working on my 2 year degree, I finally graduated with an associates degree in IT. Network emphasis…..
During my first semester of college, in a Visual Basic class, I got behind on my coursework. Rather than studying harder or trying to catch up, I decided that networking was somehow better. To be honest, I had just given up during my first semester. My effort was minimal. The next two years were rocky. A half dozen different places to live. A move to California. A move back from California. Somehow by the good graces of God, I finished my associates degree and found a job.
I started my first professional tech job at a bank. I fixed Windows 2000 and Windows XP issues. I fixed printers. I disassembled printers. I would use sandpaper to rough up the rubber wheels inside the printers that had gone smooth from a billion+ print outs. I managed file servers, an exchange server, and even helped integrate a black berry server with our exchange server. I used Active directory and managed our domain controller. I didn’t create anything though. I just fixed problems using existing tools and solutions. It wasn’t a bad job at all. I just wasn’t very excited about this job at this time in my life. I was supposed to have been a millionaire by now. My delusions were only beginning to crack.
My next job was doing IT work for the community college that I had barely graduated from. (Luckily they saw more in me at the time than I did.) One of the great benefits of this job allowed employees to take a certain number of classes each year for free. In 2010-2011, I took a C++ course and an HTML/CSS course. I then took a follow up C++ course in the spring. I loved it. In the fall class we used the DarkGDK to make game objects and script some simple games. The DarkGDK was a game development library along with some tools that hooked into Visual Studio 2008. The library was really fun to use as it simplified all of the game math. Using pre-built functions to draw and make shapes was similar to my 4th grade Apple experience but I don’t think I connected the two events at this time. The 2nd semester course was formal C++ making command line tools. I made it 3/4 of the way through the book but never fully finished in the end.
I worked at the community college for five years before deciding to take a detour back home. From January 2013 until January 2015, I worked away from the IT world. While these two years were filled primarily with farming and ranching duties, I still fixed computers problems for people on the side. I was even allowed to teach a night course back at the community college on Windows 8. Teaching had its own challenges but it did allow me to create things. There was a sense of accomplishment when my own instructions and metaphors helped the students gain understanding. I discovered an appetite for technical information that I could then digest and share with others.
Despite my limited success as an adjunct night time instructor, my own skills in C++ and HTML had however grown rusty as barb wire. I had a choice to make about my future and my skills. It was time to decide if I was going to live off of the land, or live off of my technical abilities. Being that my technical abilities were more profitable than my agricultural abilities, the choice was easy if only considering finances. In January 2015, I took a new job, back in IT.
My new job in IT is still my current job today in 2019. I remotely manage a network of video conference endpoints along with an office full of devices. iPads, Chromebooks, security cameras and yes, even printers. I was able to use my ailing HTML/CSS skills to make a static page of organized links to our video conference endpoints. I use this page every day at my job, but it has remained mostly unchanged since it was created. My daily tasks revolve around end user support and answering help desk tickets. The idea of creating software or doing much programming of any sort is beyond the scope of this job unfortunately.
Starting in the fall of 2016, I went back to school for a bachelors degree. With 91 credit hours already under my belt, I was faced with yet another decision: Start over with zero credits at the state uber-versity or go to a school that accepts my 2 year associates and extra credits? Could I move away and spend all day going to classes? Who was going to to pay the bills while I was at school all day? The choice was easy. The execution would still be difficult.
I went with the smaller university that accepted my credits and allowed me to continue working at my job. This was ideally the best of both worlds. Work all day doing IT, then come home and study all night. What could go wrong? Looking at the various bachelor degree options there were several in computer systems and networking. I decided to get my bachelors degree in Software Development. I would finally have another chance to study programming. This could be my chance to switch from IT into development. A chance to switch from a service role into a production role. A creator rather than a helper.
My classes ran an accelerated schedule of two classes at a time for 8 weeks, with one week off as the 9th week. Followed by two more classes at a time for 8 more weeks. The intention was to go perpetually for 2 years at this pace. The reason for this pace is because this course load qualifies as full time. Full time is needed for financial aid which was essential to me being able to go back to school. The pace isn’t impossible by any means, but my life has proved to be near impossible while on pace.
I took off a semester after my first 16 week run. I was exhausted and burnt out. I then did another 16 weeks of classes before taking another semester off. We were studying Java and Object Oriented Analysis and Design. We had a web course that was supposed to involve Javascript and HTML/CSS but the server was messed up so we just did some Pearl and PHP. I enjoyed the time I spent working with Java and Pearl. Learning about RegEx or regular expressions was perhaps the most memorable. We hadn’t really done anything with object oriented programming at this point other than read about all the relationships the different objects can have with one another. I took my customary semester off and then started classes again in early 2018.
Intermediate Java and Databases. We started in with our 2nd level Java book. This book immediately reminded me of my 2nd semester C++ book. Lots of console applications with a lot of dry language rules. The first few chapters were review from our first Java book. Operators, Control Flow, Arrays, etc. Everything was going along fine until we started creating objects. Suddenly I was struggling to create the homework programs correctly. My GPA started to fall. By week 5, I dropped out. This time it wasn’t just a semester off. It was off for good.
Fast forward to today, May 19th, 2019. I’ve spent the past year working and fixing computers on the side. I’m about 9 months to a year away from my bachelors degree. The exact timing depends on when I decide to fill out financial aid and re-enroll in classes. It could be 5 years away at this point. At this point in the story, my degree doesn’t matter as much. I’m long past my original goal of being a millionaire by age 25. I forgot to retire when I was 30. So now what?
A couple of months ago, I realized that the harder I kept thinking about being a programmer, the further away I was getting. If I was ever to get out of IT and into a software related job where I could create, I would need a degree. To finish my degree I would need to learn object oriented Java and Databases with SQL. The remaining courses after Java and Databases are more Java using the Spring library for MVC and more databases. Knowing that a functional web program of some sorts is the end goal of my software development coursework, I had another choice to make: Re-enroll and endure a hectic schedule while trying to learn Java and Databases, or just learn Java and Databases.
If I have to create a hosted web application that interacts with a database, in order to pass my classes, then I should be able to create exactly that. Whether I’m paying for college credit or not, I should be able to create the application. Correct? Can I create that application right now? Well? Why not?
The reality of software, code, programming, scripting etc. is that you can either produce or you cannot. A half production doesn’t do anything for the creator or for the user. Programs either work and work well, or they are replaced and forgotten. Degree or not, certificate or not, the creation either has value or it does not. Can I deliver value or not? I must admit that I currently cannot. So what can I do?
Yeah? What can you do?
>_
What I can do is double down. Re-commit. Continue learning and creating with renewed focus. All the potential money, would-be jobs, and wealth be damned. I can pickup my books and continue on. I can do it for the love of knowledge and nothing else. As it should be.
I’ve recently made a program that helps my wife each day at her work. I found a problem she was encountering that I could actually solve. I made a complete solution using my Java skills and a bit of love. I’ve learned about Java deployments and producing code to run live on a businesses computer. Today I’ve created my first blog post to document my journey into the future. Today I re-commit to studying computer science regardless of what it does or doesn’t bring.
My name is Todd and I’m committed to studying and playing with software. If I remain committed and studious, my degree and financial issues will resolve themselves. Else I’ll remain in IT with a steady paycheck && a fun hobby.