Author Archives: timdrevitch

Apprenticeship Patterns Blog Post #5

For the next apprenticeship pattern that I would like to discuss, my choice was to do the one in the text book entitled “The Deep End.” This pattern was similar to a previous pattern that I have discussed in that it relates to a time when a beginner in programming is preparing to enter the real world of job opportunities. In the other pattern, I learned ways in which I should try to show that I am qualified for a new job if I do not have much prior experience, if at all. A lot of times, employers are looking for candidates who show that they have the skills necessary for the position based on many things (primarily prior experience or certification), but sometimes what is needed is more than that. Sometimes what is needed is the willingness to try more than anything else. For this pattern, the book discussed how to motivate me to dive off the deep end and get the job I want not just the one I think I can handle. If my enthusiasm and my will to excel and learn at the job remains strong, I should not have to concern myself as heavily with how well equipped I am for the job in the first place. I purposely decided to review this pattern because of what is going on in my life right now. I have been setting up job interviews and phone calls recently to try to get jobs after I graduate. In most interviews I have had, my background has been an issue even if the employer does not seem to think so. I am thinking too much about whether I will be able to even do the job if I get it rather than trying to get it as best as I can and then seeing what I can accomplish from there. The book explains that the solution to this problem is to reach for that opportunity even if there is the possibility that it could lead to failure. It states that “waiting until you’re ready can become a recipe for never doing a thing. So when you’re offered a high-profile role or a difficult problem, grasp it with both hands. Growth only happens by taking on the scary jobs and doing things that stretch you.” My solution would be to do just that. I am going to try to get involved in the opportunities that I have been hesitant about pursuing. The risk of failure is often overemphasized and crippling to anyone who tries to find their opportunities especially in the beginning of their journeys. I need to stop weighing the risks so heavily and quite literally “dive into the deep end.”

From the blog CS@Worcester – Tim Drevitch CS Blog by timdrevitch and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Blog Post #4

The fourth pattern that I plan on discussing is titled “expose your ignorance” in the book. The reason I want to choose this pattern to learn next is because I believe that it relates to me one hundred percent of the time I am in school. The idea behind this pattern is that if you do not speak up when you are lost, you will inevitably hurt your learning process. Many people, including myself, get into the habit of not vocalizing questions and concerns for fear of being disruptive, time-wasting, and possibly getting even more confused. It is very easy to simply keep your head down and struggle through a course or project without getting everything you need out of it. Basically, in situations where you do not know what you are doing, protecting your pride is often a bad solution, and exposing your ignorance is likely your best option. The book does a great job explaining why this is and it has good examples of times where it is a needed apprenticeship pattern to pick up. Even in jobs, it is important to expose your ignorance. The easiest way is by asking questions. Not only will it help you learn faster and more, but it will also ensure that you are doing everything right and in the way that your employer expects you to get your work done. The book has other solutions for this as well. In fact, the main action that it tells you to carry out is to “write down a list of five things you really don’t understand about your work. Put that list where others can see it. Then get in the habit of refreshing this list as your work changes.” Personally, I feel like in my years of schooling I have not reached out enough with questions for fear that I would look like I do not know what I am doing. It is not going to get any easier for me when I try to get real jobs, so it is important for me to learn to put my ego aside and expose my ignorance in a way that will allow me to learn and get better everyday.

From the blog CS@Worcester – Tim Drevitch CS Blog by timdrevitch and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Blog Post #3

After completing my apprenticeship introduction blog post and two different patter reviews, I am excited to keep reviewing more. For the next pattern from the textbook that I have chosen to review, I chose the “concrete skills” pattern. The book describes a situation in which you are trying to work with a group or at a job in which you do not have a very strong background in yet. This is ofter one of the most inconvenient thing when looking for starter jobs. Most jobs want individuals who have a good background so they know you will be a good fit for the job. The book also supplies us with a great solution to this problem however. Basically, it states that you will have a better chance getting the job if you can prove that what you lack in background work, you make up for in your ability to learn quickly and work hard to learn new things on your free time as well. The more jobs and projects you can accomplish/work on, the better your portfolio and background becomes overtime. Eventually you will find it easier and easier to get where you want to get, and it all starts with your first several projects/jobs. This specific apprenticeship pattern resonated with me primarily because I personally do not have a great background yet and am trying to create a good one. The advice from this section was super powerful, and to be honest, this might be one of the most important concepts discussed in the entire textbook!

From the blog CS@Worcester – Tim Drevitch CS Blog by timdrevitch and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Introduction (Ch1, Ch2-6 review)

For my Computer Science Software Development Capstone course, we are reviewing the book Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman. Before discussing different patterns themselves, I would like to review and discuss the introduction chapter and the smaller introductions to the first six chapters of the text. The entire beginning of the book attempts to explain and introduce us to what exactly we will be learning throughout the semester. It goes over what apprenticeship patterns are and where they came from. It tells us what exactly software craftsmanship is and what apprenticeship is. Lastly, it tries to answer the question “what next?” after learning these things. To start, the book makes it clear that there is no simple definition for software craftsmanship (at least how it is using it), and it tries defining it as a “community of practice united and defined by overlapping values.” To see those values, I would read page four and five in the text. Next, the book defines what it means to be an apprentice. It states for the most part that it is the state of looking for more efficient ways or better solutions including looking for better resources to help because anything being done could be being done faster or better. It defines apprenticeship as the state of learning the craft (in this case, software development). In the conclusion of chapter one, the book discusses where apprenticeship patterns even come from and what we should be doing with them. It claims they come from “many working systems that have used the same solution to solve similar problems.” Basically, after learning all of these patterns, I should be able to take what I have researched and mix and match the patterns where I see fit in real life as if I am the apprentice right now and the book is my tool for learning my craft. Before I conclude this blog entry, I would like to briefly discuss the introductions to the five chapters after this first one (especially since I will be reviewing patterns from them over the course of the rest of this semester). Chapters two through six will cover patterns ranging from self-assessing, resilience training, working patterns, working with others, perpetual learning, and constructing my curriculum, etc. I am extremely excited to get into my assessments of these different patterns and learning about my craft. I actually have researched a couple of the subjects covered in these chapters and it is incredibly valuable information for my future as a software developer. I look forward to reviewing at least eight (if not more) of the different patterns and sharing my experience learning them with anyone who will be reading these blog posts now or in the future!

From the blog CS@Worcester – Tim Drevitch CS Blog by timdrevitch and used with permission of the author. All other rights reserved by the author.

Software Quality Assurance and Testing Blog Post #1 (JUnit 5 Testing)

For my first reflective blog entry on my Software Quality Assurance and Testing class, I decided to further research Java JUnit 5 testing. JUnit 5 testing was the topic of my first assignment in this course, and a lot of the assignment involved researching. I wanted to do even more research now that I finished my assignment and record it as this blog post. One of the biggest takeaways from the assignment was learning the differences between JUnit 5 and JUnit 4 to see why we use JUnit 5 now. I decided to find a good source on the differences and discuss them here. The best source that I found was from HowToDoInJava.com, and this website was actually one that I referred to for help on my assignment earlier. The source describes eight major differences. The first change from JUnit 4 to JUnit 5 is the change in annotations. Many syntax changes occur when switching to JUnit 5 (not every one changes). Next, it discusses the architecture which changes from one single jar file to three separate sub-projects (Platform, Jupiter, and Vintage). The SDK version requirements change from one to another as well as assertions and assumptions slightly differ as well. Test Suites and tagging both change as well. Lastly, JUnit 5 finally allows for third party integration while JUnit 4 never did. Most of these changes are not game-changing or extremely different from each other, but all combined manage to prove that JUnit 5 is a step forward from JUnit 4. I am happy that we went over this topic as an assignment in my course because I did not even know that JUnit had separate versions like this until now! If I were you, I would definitely give my source for this blog post a read. It was very interesting, and it did a great job explaining the differences I was trying to uncover! I will put a link to it at the conclusion of this post.

https://howtodoinjava.com/junit5/junit-5-vs-junit-4/

From the blog CS@Worcester – Tim Drevitch CS Blog by timdrevitch and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Blog Post #2

The second apprenticeship pattern from the textbook that I would like to discuss is the one described as “Unleashing your Enthusiasm.” For the most part, the book is trying to say that some students learning software development are not up to speed with knowing all they need to know yet but have great enthusiasm towards the subject. This often times holds them back in succeeding and learning primarily because of others with countering attributes. Many people have more knowledge of software development but much less enthusiasm toward it, and these people sometimes will hinder the success of the less knowledgable enthusiastic learners. The book primarily describes examples of this hindering with the different members of groups having less enthusiasm and not appreciating the ideas of the others. Groups in software development tend to think normally and about finishing their sprints and nothing else. The extra enthusiasm and ideas from the member of the team is often seen as just an annoyance to the other members when they are in a rush to finish their work. The book describes ways of getting around this by talking to people you trust about your ideas and edging them to give their feedback. Suppressing your enthusiasm and ideas is the worst thing you can do because you could have small amounts of knowledge and lose your enthusiasm entirely. Do not let your possibly great ideas go never proposed. It is your job to energize your team and not let them fall into the lapse of simply doing the work to do it.

From the blog CS@Worcester – Tim Drevitch CS Blog by timdrevitch and used with permission of the author. All other rights reserved by the author.

Apprenticeship Patterns Blog Post #1

Throughout this semester, I will be reviewing several different apprenticeship patterns from the first six chapters of our in class textbook. For my very first post, I decided to review the first pattern covered which was “Your First Language.” For many of my friends and classmates (including myself), Java was the first language learned. When we are first starting out learning programming, the book tells us that it is incredibly valuable to master our first language or two rather than try to learn a bunch of different languages at once. I am a firm believer in this notion as well simply because, with my knowledge in Java, I am able to translate to other languages fairly easily. The book explains that trying to learn all the languages instead of one for when a programmer is just starting out is not ideal mainly because it will end up causing more confusion than learning. If I am great at my first language, it is generally not too difficult to solve a problem in that language and then translate it to a new language after the fact. A great quote the book uses to describe this is by Alfred North Whitehead, and it reads, “by relieving the brain of all unnecessary work, a good notation sets it free to concentrate on more advanced problems, and in effect increases the mental power of the race.” It definitely is a bit concerning to me when I see job applications stating I need to know certain languages or programs that use specific languages, but my original background in Java has proven to be extremely helpful in learning how to use those other languages. All the work I put into learning Java has helped me with my understanding of all languages, and for the most part, I just end up needing to teach myself the slight syntax differences between them all. This portion of the textbook spoke to me strongly because I have often thought about what would have happened if I had learned a different language for my first language. I see now that it most likely would not have changed anything, and that makes me happy!

From the blog CS@Worcester – Tim Drevitch CS Blog by timdrevitch and used with permission of the author. All other rights reserved by the author.

LibreFoodPantry Website Review

Because of the fact that my entire capstone experience at Worcester State will be helping develop software for LibreFoodPantry, it seemed only right for me to review the website and try to discover things that will be helpful for me this semester. I first visited https://librefoodpantry.org/#/ and read over the main page as well as the smaller tabs such as About, Licensing, and What’s new. A section that I found interesting was on the main page when I learned that this whole project we are working on is generally new and should be changing a lot as we go along. It is quoted saying, “currently we have built prototypes of specific features for specific clients, but as of yet no software has been deployed for a client. This means we are in the very early phases of development and much about our software, processes, and tools are in flux. Please be prepared for change.” Nothing has been deployed yet and everyone is relatively new to the idea we are trying to create. This could be frustrating in the future if we get stuck or if we have to change things on the fly. However, it could also be exciting because we could be the first to get it to work properly and successfully! I am extremely excited for this semester and this capstone, and working on a project for LibreFoodPantry is the perfect process for teaching me what I may be needing to do in the real world after college.

From the blog CS@Worcester – Tim Drevitch CS Blog by timdrevitch and used with permission of the author. All other rights reserved by the author.

New Semester Introduction

I am thrilled to be continuing the blogs I started in my previous semester. I’d like to introduce myself a little bit again in case anyone reading this is new to my blogs. For starters, I am a Computer Science major at Worcester State University, and I am scheduled to graduate in the Spring of 2021 (after this last semester). I have a concentration in Software Development and a minor in Mathematics. Outside of school, I like to play games, hang out with friends and family, and play sports. I am on the NCAA Ice Hockey team for Worcester State, but before college, I played many other sports like lacrosse and soccer. I graduated from Warren Hills Regional High School in New Jersey in 2017 before joining the WSU Lancers. I either plan to go to grad school or find a job after this semester! Most blogs following this will relate to two of my classes this semester (CS-443 and CS-448).

From the blog CS@Worcester – Tim Drevitch CS Blog by timdrevitch and used with permission of the author. All other rights reserved by the author.

Blog #7: Hierarchies

I have already written two separate blog posts on the topic of Class Diagrams (UML and ER) so it only seems right that I revisit how they relate to hierarchies in programming. During this semester, we transitions from UML Class Diagrams into hierarchies with class assignments and a homework project about ducks. The fact that the assignment was based on a program about ducks sounds funny, but it was actually a great example to work with for learning hierarchies better. Some ducks can fly, swim, quack, or squeak depending on the type of duck (including rubber ducks etc.). This is perfect because although all the duck types are considered “ducks,” they all cannot do the same things. This means that programming classes for the different ducks was extremely efficient if it had a good hierarchy for the classes. Rather than hard-programming what every duck could do one at a time, the hierarchy allows the programmer to write much less (as well as have a much easier time adding or deleting duck types). Obviously since all the ducks where considered “ducks” the main class we had to write was just the duck class. Every other class extended off this class and inherited functions from that class. If some ducks shared similar actions and properties, then they would be grouped together under another class and so on. This often creates a web/tree shape if the program where to be drawn out in a diagram. I have learned about hierarchies and their benefits and importance before this semester, but revisiting it is always good for me, especially since I have a bad habit of trying to hard-program things if I am not getting the hierarchy to work the way I want it to. For this post, I did not use a link, but I certainly would still recommend looking around the internet or in books to find all the information about this very important topic of computer programming. All of the studying, researching, and practicing is valuable!

From the blog CS@Worcester – Tim Drevitch CS Blog by timdrevitch and used with permission of the author. All other rights reserved by the author.