The Developing Developer: Spring 2019 in Review
Code in Microsoft Visual Studio Code/Carter Jones 2019

The Developing Developer: Spring 2019 in Review

Spring 2019 of my MS - Computer & Information Science journey is now finished, at long last. Now that the smoke has cleared and the dust has settled, I'd like to take some time to reflect on and digest some of the things I've learned both as a growing software developer and as a human being, and share some things that might be of interest to you, especially if you've been on this journey, are on this journey, or are considering it for yourself.

I took more courses this semester than in the previous semester: namely, these are Advanced Programming Concepts, Web Programming: Server-Side, and Computer Networking. Each course has been a unique learning opportunity, with each course complementing each other in ways that revealed to me the almost Aristotelian unity of the different topics of study that fall under the aegis of Computer Science. Each of these courses has contributed to my growth as a human being and as a software developer, and I'll go through each course in turn as I have in the past.

Advanced Programming Concepts

Advanced Programming Concepts is perhaps a bit of a vague name for the course, but what it amounted to was "Object-Oriented Programming with Java." The form of the course was essentially that of guided self-learning - there were no lectures or class meetings to speak of, only a series of slides taken from the door-stopper Gaddis Java textbook. It covered the basics of object-oriented programming (OOP) and design, such as classes, inheritance, polymorphism, encapsulation, and how to effectively wield these tools and techniques to produce quality software. From the foundational concepts of OOP the course also had us study the basics of how to construct a GUI using Java's Swing and AWT libraries, and even how to build Java applets (which have largely been deprecated in current practice).

The course required students to complete a number of programming assignments (as might be expected), and each one utilized different OOP and Java GUI principles. The first assignment was to develop a simple GUI application utilizing an Employee superclass and a Manager subclass, allowing the user to select between employee and manager categories, enter relevant information, calculate a "raise," and display it in the GUI. While nothing special, it was a good way to dip our toes into the waters of Java GUI application development.

From there, we had to develop two small Java applets (displaying an oval and a hexagon, respectively), and this is where things got a bit interesting - it was around this time that I learned that applets are largely a thing of the past, and that Oracle (the company that manages the Java programming language) no longer supports applets in any meaningful way. This, understandably, made testing applets in a browser almost impossible, and after conferring with a classmate we determined that the best we could do is use the Applet Viewer that came packaged with our IDE (Integrated Development Environment).

No alt text provided for this image

Why this assignment was of particular interest to me is that it required the exercise of research and complex problem-solving in the face of the ever-shifting landscape of modern technologies, and it was a good reminder of the impermanence of our tools and techniques and the need to continually improvise and adapt in order to overcome these challenges. What could have been perceived as frustrating (as indeed it was) wound up being a fun and exciting challenge. It provided a deep insight into some wisdom I had learned from a software developer friend of mine: that the languages and tools themselves are not important and of themselves, but that the true work of software development is critical thinking and problem-solving, irrespective of language or framework. Those, after all, will always change - but the ability to think deeply and critically will never cease to be useful.

The last project of the class was to take a .txt file containing a list of student names and grades, ingest them into a GUI, and display them through that GUI in a table along with calculated final grades and a compendium of the number of A's, B's, and other letter grades found in the class. While this project was also an interesting endeavor, it mostly builds on the above-mentioned lessons, and so I won't reiterate them here. To see the code generated by the two main projects of this class, you can find them on my GitHub here: https://github.com/cartermjones/advanced-programming-concepts

?Web Programming: Server-Side

What can I say about this class? It was amazing. I've had a profound interest in web development since first starting to learn it last year (I've even got a website under my belt now!), but this class... this class really opened my eyes to the possibilities that are available to web developers when they develop applications using both the client-side (or front-end) and server-side (or back-end) in unison. It was transformative for me in a number of ways.

For those of you who may not know, the Internet as you use it is composed of many interconnected parts, and these can be broken into two overarching categories: the front-end (what you can see) and the back-end (what's happening behind the scenes on a server somewhere). While it's possible to create a nice, informational website using only front-end techniques, the real power of what's possible in web development comes from leveraging the back-end. Programming on the back-end allows for such things as user accounts, processing transactions securely, executing business logic, tapping into databases, and so much more. The front-end only scratches the surface: what makes things like Amazon, Facebook, and LinkedIn possible is what happens on the back-end. This class was, needless to say, quite eye-opening for me.

In this course we learned back-end development primarily through the medium of PHP, a common server-side scripting language. We also learned a bit of SQL (Structured Query Language), a language used for manipulating databases, and of course we learned, in broad terms, how the back-end functions and how all of its parts are interconnected and related.

The highlight of the semester was the one programming project that we had: we were required to develop a mock e-commerce platform that could display an inventory (read from a .txt file) and allow users to select items from the inventory, place them into a shopping cart, and checkout at the end of their shopping session. While the technical aspects of this project were interesting, the form of the project what was most instructive for me: I did this project as part of a team of myself and another person, who is a more experienced professional developer. Being able to collaborate on this project from start to finish and do pair programming was a wonderful insight into a real example of a software developer's thought process - it was a good exercise in teamwork on a software project and the things that go along with it, such as regular communication, version control using Git/GitHub, and dividing up tasks in order to make the code more manageable and maintainable. This was by far the most edifying part of the entire semester for me, and I hope that these lessons will prove useful in the future when I move into a software development role - something this experience has made me all the more excited to do.

Computer Networking

Ah, Computer Networking... what can I say about you? It was... not exactly what I expected. I expected to learn about computer networks and how to configure and maintain them, but instead what the course covered was the broad theoretical framework of what computer networks are and how they function, using the Internet as the primary example and case for study of networks. This course allowed a good insight into how the Internet functions (it is a "network of networks," as was often iterated throughout the course), and the problems and research areas that are prominent in the area of academic computer networking theory, such as network topology, load balancing, efficient and less-than-efficient methods for moving packets of information from one machine to another... and so forth. The material was often dense and dry to an extreme, but nevertheless there were some good learning moments here, as well.

The most instructive portion of the class was a project in which we were required to build a simple server and client that could be used to listen to requests/send files and send requests/receive files (respectively). I chose to implement this in Python, and it took two grueling weeks of slogging through Python socket programming documentation and Stack Overflow to get the things to work. Several times I contacted my professor for help when I got stuck, but to no avail - he doesn't believe in answering student emails, apparently. So I turned to software developer friends of mine to review my code in order to find my critical oversight, and then finally to Stack Overflow, a forum for developers in which other developers can review code and provide advice - often blunt, but usually correct advice. A denizen of Stack Overflow pointed out I had badly formatted an HTTP request, and BANG! Suddenly everything was working.

This helped me learn a couple of things: first, the humility to ask for help when something isn't working, and secondly, that often, when it comes to code, the devil is in the details. Computers are very fast, very precise... and very stupid. They are not as tolerant as you or I to errors such as the lack of a line break at the expected place - and this has helped me to learn to approach programming with exceeding care.

The code for this particular project, for those interested, can be viewed on my GitHub here:

https://github.com/cartermjones/computer-networking-with-python

Conclusions

This semester has been a whirlwind, one thing after another, and I'm glad that it's finished; at the same time, I'm profoundly grateful that it happened. It was full of lessons, ups and downs, and wonderful experiences of becoming more a part of the software development community. I hope that I can continue to develop in that direction (pun fully intended), and I hope that perhaps you have found something of use or interest in my experiences, if you've had the stamina to make it this far into my article.

Thank you for reading, and I hope to catch you again next time!

Until then, Godspeed, and happy learning!

要查看或添加评论,请登录

Carter Jones的更多文章

  • How the Humanities and Computer Science Intersect

    How the Humanities and Computer Science Intersect

    Well, guys, I’ve done it. I graduated with my MS in Computer Science, just two years after finishing my MA in English.

    5 条评论
  • Engineering & Design: A Summer of Learning

    Engineering & Design: A Summer of Learning

    This has been a whirlwind Summer, to say the least: two months of intensive work and study, among all of the hustle and…

  • Lessons in Writing 2018: A Year in Review

    Lessons in Writing 2018: A Year in Review

    Well, 2018 has been quite the year. I've written a lot lately about my experiences in Computer Science, but I couldn't…

    2 条评论
  • Lessons Learned in Computer Science (Fall 2018)

    Lessons Learned in Computer Science (Fall 2018)

    What a busy few months it has been! I've just wrapped up my first semester of the online Masters of Computer &…

    2 条评论
  • Pivot: Writing Developer, Developing Writer

    Pivot: Writing Developer, Developing Writer

    This year has been a full one for me so far. I've gotten a good start on my novel, I've presented a talk on dialogue in…

  • How to Kill Your Dreams (And Bring Them Back to Life Again)

    How to Kill Your Dreams (And Bring Them Back to Life Again)

    When I was an undergraduate student, I remember going to a creative writing group. A woman (who I will presume was a…

    3 条评论
  • Speculative Fiction: What Is It, and Why Does It Matter? (Part II)

    Speculative Fiction: What Is It, and Why Does It Matter? (Part II)

    In my last article, I made a brief overview of my views on what is (and is not) speculative fiction. Now I’d like to…

    3 条评论
  • Speculative Fiction: What Is It, And Why Does It Matter? (Part I)

    Speculative Fiction: What Is It, And Why Does It Matter? (Part I)

    This article will be the first in a series on speculative fiction, the author’s pet subject. Enjoy! It seems like…

    3 条评论
  • The Language Arts in the 21st Century

    The Language Arts in the 21st Century

    The Language Arts, the arts of writing, reading, speaking, both in one's own language and others, is at an interesting…

  • A Critical (Re)View of Reinaldo Arenas’s “The Glass Tower”

    A Critical (Re)View of Reinaldo Arenas’s “The Glass Tower”

    “The Glass Tower” is a short story written by Reinaldo Arenas and published posthumously in his anthology Adiós a Mamá…

社区洞察

其他会员也浏览了