Advertisement
A248

Lawrence of Arabia but for Software Development (Part 1)

Jul 24th, 2021
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.11 KB | None | 0 0
  1. So, now I am to tell you about my "career" – what a funny word to describe my situation. Where should I begin? Several different choices have brought me here, and it would be dishonest to make omissions, particularly considering for some of my experiences I may not yet comprehend their value, and thus, thinking them unimportant, not elaborate them to you. At the same time, you surely do not wish to hear my life experiences tracing back 9 years ago, when I first dabbled in Scratch. Therefore, I will strike a modest compromise, and offer you an abridged version as relates to what I think most pertinent.
  2.  
  3. Our story begins in 2016, I believe it was September, when I obtained my first (minecraft) server. I did not begin to program from the outset. Quite the contrary, my first instincts were to construct features as I was able, without even considering writing them in a programming language. I put together various plugins, strung together using commands, permissions, aliases, and GUIs. I was a composer of sorts, all the various software playing its part in a technical orchestra carefully pieced together. Though I did not know how the software itself was made, I consider this a formative experience which brought my mind in tune with solving problems under various constraints with creative solutions.
  4.  
  5. Nevertheless, as one eventually finds, such "no-code" solutions (a moniker I have recently become aware of) have their limitations. Certain functionality I desired was not possible, despite combining command execution plugins, permission shops, and other mechanisms. In my quest for a more dynamic system I found a plugin called "VariableTriggers," and after seeing it and following in the same vein of software, I discovered Skript.
  6.  
  7. The Skript plugin and its power was a significant breakthrough. I was at once able to implement my desired functionality using an intuitive and readable syntax. I smoothed the seams in my existing systems and added more linkages between them via Skript's events and commands features. As my ambitions blossomed with the help of Skript, so did my abilities in it. I used all the language features Skript had to offer. In some ways, it was close to a complete programming language, including flow-control mechanisms, functions with return types, and of course simple variables, lists, and maps.
  8.  
  9. Eventually, however, I began to sense some of Skript's limitations. Though I had installed several syntax extensions, the language features became the limiting factor. Functions were defined in a global namespace. Some language features like callbacks were not available natively, though I was able to employ workarounds. I ran into bugs in the syntax extensions themselves. I had spent 3 years using Skript and had finally hit the glass ceiling.
  10.  
  11. The time is June of 2019. I must now pause for a brief interlude regarding my schooling on these matters. I decided to postpone taking the AP Computer Science class, my school's only subject on programming. I didn't have space in my schedule and I wanted to take it the next school year. This class, AP Computer Science, used Java. Some of my classmates decided to take the class, but I did not.
  12.  
  13. My next immediate goal is to fix some of these Skript extensions by editing their Java code. I downloaded some of their source code, but it wasn't enough. The code didn't compile due to missing dependencies. I went back to Skript for a brief bit, until I finally decided that Java would be more powerful. I had a general idea that Java was a fully-fledged programming language and understood the syntax limitations of Skript, being tied to its extension system.
  14.  
  15. After learning the syntax, I began to make simple plugins. My biggest initial hurdle was attempting to "access data from another class." I searched for this issue but didn't find a question that exactly matched my wording. Eclipse told me to make the method "static," but since I didn't know what this meant, I was hesitant to use this "solution." I discovered constructors by looking at another plugin's code. Thank goodness it used constructors. Java's object-oriented nature was intuitive – although Skript was not an OOP language, it had introduced me to the concept of using complex objects, like players or worlds, as variable values. I guessed correctly the meaning of 'static' after I saw others use it as a form of global access. Having a single fixed instance of my plugin was something I saw as inherently imperfect, so I decided to avoid static access early on, and my antipathy to "static" remains, and has strengthened itself, to this day.
  16.  
  17. A warmup period of 2 months followed in which I regained the same productivity I had in Skript in Java. I had made a ban script using Skript, quite similar to AdvancedBan's basic features, which failed only because of a bug in one of Skript's syntax extensions. This ban script was one of my original motivations for switching to Java, so I intended to recreate it in splendid fashion using what I had learned. At this point I had become enthralled with interfaces, so I made all the manager classes have an associated interface. I'm not quite sure why I did this; hindsight isn't 20/20 despite the common mantra. I believe my inclination had to do with exposing other methods I didn't want other classes to see. Additionally, I wrote javadocs early on, and these were well-organized by placing the docs in the interfaces. Nonetheless, my code was of course that of a newbie, and you can see so here: https://github.com/A248/LibertyBans/commit/148f1482bec5d69076f9200e6170d8d783c3811c#diff-4e75211f547283c390deb697552b549184c3c048ff0129f591b88ba847c1c9a3R293-R317
  18.  
  19. After my first draft of the ban plugin, I contacted the AdvancedBan developer, Leoko, to see what he thought, and while he was approving of my work, he asked why I didn't contribute to AdvancedBan itself. Indeed I had looked at AdvancedBan part of the way through my own plugin's development, but I was immediately revolted by the static access and singletons sprinkled throughout the project along with its ugly style of using casts. My plugin, in contrast, used a multi-module setup with implementations per platform. However, it cached most punishments in memory and saved them only on shutdown, reloading them at startup. This was December of 2019.
  20.  
  21. Here I must pause again to mention my schooling. My friends were taking the AP Computer Science course. However, my knowledge was leagues ahead of theirs, and they came to ask me about all sorts of matters related to the class. The questions were about beginner knowledge, but I answered them patiently and gladly. Considering that I, without taking the class, knew the subject more than the students in the class, I decided I should take the AP test. At my school, if you think yourself capable, you can request to take the exam for a class without taking the class itself. I asked to take the AP exam and my wish was granted. The AP test happens at the end of the year, so I still have more time to learn Java before I take the exam.
  22.  
  23. My ban plugin still has the issue that it relies on storing punishments in-memory. To solve this, I set out to rewrite the plugin using an advanced SQL query builder API. This was the most ambitious Java project I had set out to create yet. It was nothing like what I had attempted before. I made all of these changes in a new branch. Though I never merged them, they were foundational in building my knowledge of Java.
  24.  
  25. My learning achieved escape velocity from mediocrity and after the ban plugin I began to write all sorts of plugin code. My own permissions plugin, a replacement for namelessmc's plugin, an economy plugin. I contributed to open-source plugins including AdvancedBan, GUIShop, and NESS-Reloaded. We are now in March of 2020. Not only do I have more free time due to COVID-19, but I am also eager to pursue the expansion of my knowledge. I didn't care much for features, or a big plugin, or popularity; rather, my aim was to know more. These were some of the months in which I learned most rapidly and advanced my knowledge significantly.
  26.  
  27. During this time, in May 2020, I took the AP exam for the AP Computer Science course. I scored a "4", which is good, and very good for someone who never took the class. AP scoring is on a scale of 0 to 5. Depending on which AP exam you take – there are AP exams for a variety of subjects – your university will want you to score a 4 or a 5 to "pass out" of the class. To "pass out" means you do not need to take the class because the university believes you to have enough knowledge based on your exam performance. So, what this means is I passed the equivalent of introductory computer science.
  28.  
  29. In the summer of 2020, I learned still further about Java. I made the first version of LibertyBans, which was a rewrite of my old ban plugin. I developed more code and contributed to more open-source projects in 2020. I began to contribute to non-Minecraft OSS projects. Shortly thereafter, in January of 2021, I was talking with Ariel, whom I had previously helped with debugging. His old server, platinummc, was run on public plugins and I had assisted with various issues. For SolarMC, I decided to join the entourage and embark on a bold new journey. So there we are.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement