Fullstack Academy Conclusion

Short post today but I am in the process of designing and creating my own personal website to showcase my projects and what I have been working on lately.

I finished FSA about 2 weeks ago and have been on the job hunt looking for the right company and the right opportunity. I will write up my overall impressions of the program in the near future but overall, I am beyond satisfied with what I learned throughout the program and my general experience with it.

It has been a hectic couple of weeks but I look forward to what the future brings.

Junior Phase Recap

I recently finished the Junior Phase portion at Fullstack Academy and am happy that I will be continuing on to the Senior, project-based, Phase of the program. I definitely learnedย  a lot throughout the past 6 weeks. It was definitely more structured and targeted than what I could have self-taught myself in the same amount of time.

I enjoyed giving the learning process the time that it deserved because I oftentimes felt frustrated when I was learning on my own. Trying to balance a full-time job and other commitments usually only left me with about 2-3 hours a night to progress through books/tutorials/online courses but the immersion offered by this program has definitely jump-started the learning process.

The core technologies covered throughout these six weeks were the following:

  • A deeper dive into Javascript and it’s inner workings; Promises, Closures, Functional Programming, ES6 features, Thunks, Object Creation, unit testing in Javascript, etc. I feel even more comfortable with Javascript now and it has boosted my confidence when navigating new code bases for the first time. The ability to de-structure a large code base happened gradually but I believe it will help me immensely moving forward.
  • Data Structures & Algorithms Overview – I felt like I was prepared for this portion because I did some work before the start of the program, most significantly working through Harvard’s CS50 course on EdX. I plan on continuing to learn general CS concepts after the conclusion of Fullstack Academy because I still believe that a foundational base will serve me well during my career. I will be looking to work through teachyourselfcs.com
  • Manually manipulating the DOM, as well as the use of jQuery for DOM manipulation. Using AJAX to create asynchronous web applications.
  • Continuation of HTML and CSS with a focus on CSS Flexbox – I am looking to learn more about CSS Grid on my own to further strengthen my design skills.
  • Node.js – Server-side JS for building network applications.
  • Express.js – Web framework for use with Node.js. This served as a great introduction to building the back-end on our web applications.
  • SQL, PostgreSQL & Sequelize – Database management systems with a focus on proper schema design. This was one of the things that I did not have experience with prior to the start of the program and I am glad that we explored the topic in depth because it solidified my understanding of how to properly persist data for a software application.
  • Webpack – module bundler for the browser.
  • WebSockets – used to open interactive sessions between the user’s browser and a server. Bi-diretional communication compared to RESTful HTTP applications.
  • OAuth & Passport.jsย – used to create sessions, cookies, etc.
  • React.js & Redux.js (react-redux bindings) – front-end UI and state management. I really enjoyed this portion of the curriculum. With these two technologies, I can now create a true fullstack application. We used these two technologies on our first independent project and it really solidified my interest in switching over to a career in web/software development – the ability to solve interesting problems is one of the main reasons that I am loving this transition!

Overall, the program has definitely exceeded my expectations. I feel like the pace of learning, although often-times seemingly going at breakneck speed, definitely facilitates a better learning environment than trying to learn on your own. The heavy use of pair-programming during this portion of the curriculum has also taught me how to better communicate my thoughts and ideas with others, as well as how to tackle debugging and troubleshooting using different approaches. Everyone has different styles of coding but ultimately, we are all interested in solving the problems at hand.

I am beyond excited to start the final phase of the Fullstack Academy experience! I will be posting another recap near the conclusion of the Senior Phase as well. Happy coding ๐Ÿ™‚

 

Week 1 Recap

I recently finished the first week of the Junior phase of Fullstack Academy. I enjoyed working on the materials that were presented and I feel like I learned a lot in a short amount of time, due to the high quality of the instructors and the immersive aspect of the program. I really enjoyed having to pair program with different people because I was able to see their coding styles and also pick up additional debugging tricks. We covered Data Structures and Algorithms in this first week, as well as continuing to explore the internals of the Javascript language. Some of the core concepts included the following:

  • Big-O Notation (for time and space complexity)
  • History of Computing (Binary, Hexadecimal, AND/OR/NOR/XOR/NAND gates, etc)
  • Linked Lists, Doubly-Linked Lists, Queues, Stacks, Hash Tables, Binary Search Trees (along with Depth-First Search and Breadth-First Search)
  • Sorting using Bubble Sort and Merge Sort
  • A Game of Life implementation
  • Introduction to the DOM & DOM Manipulation Techniques
  • Introduction to Node.js and the Event Loop
  • Re-implementation of DOM Selector methods
  • Continued Git usage
  • Compilers and Parsers (First installment of CS Saturday)

The workshops consisted of pair programming and implementing the above ADTs using different Data Structures. Although the pace of the week was quite fast, I feel like I came into it prepared. Having worked through these concepts on my own this past year and a half really helped (especially the concepts I picked up in CS50). Excited to start week 2 of the program!

Ready…set… Start!

I will be starting the in-person portion of Fullstack Academy tomorrow morning. I am really excited to meet everyone else from my cohort and I think that we will all be able to learn a lot from each other. It feels as if I have been waiting so long for this moment and I am definitely ready to dive in!

Why Fullstack Academy?

I decided to attend Fullstack Academy because I believe that this program provides all of the things that I am looking for in a bootcamp:

  • Immersionย – Learning more about best programming practices and about the technologies currently being used in industry. Ever since I made the conscious decision to pursue a career in software and technology, I have been looking forward to being able to dedicate my time fully 24/7 to learning as much as I can.
  • Mentorshipย  – Access to people that have worked in the software development industry who have a passion for teaching others.
  • Structure – Having access to a curated curriculum will help me absorb skills that will help me with my career transition. I believe that given enough time, these skills can be self-learned, even without the help from a bootcamp. However, I think that the structure of a formal program will help me jump-start the learning process.

Having already received a four year B.S. in Mechanical Engineering, I did not feel like it would be the best use of my time and money to go back to an undergraduate program to pursue another B.S. in Computer Science or Computer Engineering.

I discussed it over with friends who have already pursued a B.S. in Computer Science and our impression is that the first two years of the curriculum, most of our classes were about the same (same math, physics, chemistry, etc.) and that the first two years of a CS curriculum only have roughly 6 unique classes relevant to the CS major: Introduction to Computer Science, Basic Data Structures, Computer Organization and Systems Programming, Mathematics for Algorithms and Systems Analysis, Advanced Data Structures, and Software Engineering Tools & Techniques. Some of these topics were covered in my own undergraduate degree, as we also had to learn about programming in order to use it in solving domain specific problems in mechanical engineering.

During the past year and a half, I have been slowly working through the equivalents of these courses offered through online platforms like EdX or Coursera (for example, EdX’s CS50 which is taught at Harvard). Even after I conclude my time at Fullstack Academy, I intend to continue to self-teach myself, following the curriculum of a standard 4-year Computer Science degree to further solidify my understanding. I have also started looking into potential masters programs that I can enroll in that will further enhance my knowledge of Computer Science and how it relates to developing software in the present day.

It is my belief that without a strong basis in the underlying concepts, the software that I design and develop will stand on shaky grounds. I believe that, in general, there are two types of engineers: those who understand the underlying concepts intimately and can tackle challenging and innovative work and those who can get by only by relying on a few high level tools. I consider myself a life-long learner and am excited by the vast repository of knowledge that the field of Computer Science contains.

(mechanicalEngineer) => softwareEngineer;

I have worked as a Mechanical Engineer for the past 4 years – I was lucky enough to be able to start working in my field professionally after I finished my undergraduate degree. I worked in two different companies over this time, once as a Mechanical Engineer and the other as a Mechanical Design Engineer. I used SolidWorks and AutoCAD (as well as other CAM/CAE software) extensively during this time and leaned on the skills that I learned in college. Although I enjoyed my job and was comfortable in the sense that I could keep working as a mechanical engineer and ‘get by’, after some time, I felt that I was starting to plateau. After the initial periods of intense growth, I realized that I had stopped learning new things on the job. Over the course of the last couple of years, I began to think about my future – when you are in school, the goal seems set: you finish your degree, you start working in your field, and then … ? I reached the point in my career where I started to think about what it was about my job that excited me and challenged me. I distilled it down to this: I enjoy solving problems and I want to use my skills to help people. It seems like software and technology is the perfect fit for this.

With Mechanical Engineering, I found the following limitations:

  • Lack of resources – Unlike programming/software, you will NOT be able to find blogs, podcasts, meetups, online communities, educational games, conferences or other learning outlets that are teaching ‘mechanical engineering’ or trying to advance the field. The closest equivalent that I was able to find was the DIY/Maker movement but even then, it is limited in its scope. If I want to learn something new in mechanical engineering, the best bet I had was to find a relevant book? There is also a very limited social aspect that is very isolating. The field of mechanical engineering is fairly stable, it seemed like the work that I was doing would continue to be done in the same way for years (or decades?) to come – whereas it seems like software and technology is constantly changing and affecting our daily lives more rapidly.
  • Materials and Hardware aren’t cheap. In order to work on projects, the costs of the materials is prohibitively expensive, be it plastics, metals or wood. Even with the advent of cheaper manufacturing processes, as one person, you are still very much limited in what you can build and design. Prototyping is not accessible in terms of cost or access. This is where I think it is different with software. With as little as an old laptop and the shakiest of internet connections, it is still possible to create new products. Not only that – there are whole communities devoted to doing so, in a vast amount of different niches and specialties. I believe that the open source mentality lends itself more to innovation and creativity.

With this career change, I think that I will still be able to solve problems that can help people. I would like to be a creator in the field instead of just a passive consumer and I am excited by the fact that there is so much to learn about software development.

Motivations & the Future

This program is set to last until early April – I will continue to update my progress throughout and will (eventually) provide a detailed description of what I learned and what I have already learned in the remote portion of the program. I have already started planning and scheming on what I will be pursuing after the program – be on the lookout for updates then! Until then, I am thrilled to start this new path in earnest and I look forward to seeing what 2018 will bring ๐Ÿ˜Ž

Autumn Update ๐Ÿ‚

I recently got into the Fullstack Academy’s Immersive January 2018 cohort! (I will write up my thoughts on the application process and the program itself at a future date). I am currently in the planning stages for the cross-country move from CA to NY so I haven’t been able to study/learn/work on programming as much as I would like recently but I am very excited about what the future holds. I am really looking forward to leveling up my skills with other like-minded people!

Over the past few months, I have shifted my focus to learning JavaScript and all of its interesting features. The C background from Harvard’s CS50, as well as all of the Python work I was doing definitely made picking up the syntax relatively easy. I have been going through the history of the language and its evolution throughout the years in preparation for the program. There are also some really good tutorials showing the new ES6 features. The following Youtube Channel has been very helpful as well:

I believe that the skills I will pick up after going through the bootcamp will definitely add new tools to my existing toolbox that I can use to solve interesting problems. What I find most interesting about JavaScript so far is how you can use multiple programming paradigms to solve the same problem – the functional programming support shown by the language has been very interesting and I am looking forward to diving deeper into the language.

ps – The directed graph work for/from Gephi is still ongoing (work on it has been paused to focus on JS learning) but I am hoping to incorporate the data into an interactive website using either d3.js or sigma.js. I have an internal deadline of December 20th to complete this since that coincides with the organizations event that will use this data in their presentations.

pps – Gephi work has been paused until mid-April 2018 but there is a possibility that this can be a small contracting gig for a web development project! TBD.

The Post that was Promised

Below is a recap of all the CodeNewbie episodes (up to the latest episode) for my own reference that I said I would post on my first post (finally caught up and just in time for GoT s7 finale!).

I am keeping the Amazon referral links the same so that any purchases from the show links go directly to Saron @ CodeNewbie since she is providing great content for free. I will update this post over time to add new episode notes and am hoping to eventually migrate this over to a GitHub pages site.

Some of the episode notes that I took are more extensive than others- I was not able to take thorough notes on some episodes while I was listening so I encourage you to listen to the episodes that you find interesting!

Continue reading “The Post that was Promised”

A Slice of Cake & Pi

I recently received a Raspberry Pi as a birthday gift from some of my friends – I was definitely surprised and super grateful for the thoughtful gift. This has been on my wish list for the whole year (how did they know?!). I had not gotten around to ordering one so this came at the perfect time ๐Ÿ™‚ I am trying to see what would be a good first project to use it for! (I think at the very least I hafta hafta try RetroPi on it for some retro gaming goodness)IMG_20170821_222220

 

Twitter + Python

I am currently working on a small project that uses the Python module Twython to extract tweets from a certain time frame relating to certain keywords/hashtags. I will be using the data from this to create a graph of Node -> Edge relationships between Twitter Users who Retweet, Quote, or Mention other Twitter Users (using those specific hashtags or keywords). In this case, the nodes will be Twitter Users and the edges will be their connection through Retweets, Mentions, or Quotes. I will assign a weighted value to the edges by counting the occurrence of each node-to-edge instance to be able to determine modularity within the graph (detecting communities between the connections). The Streaming Twitter API limits data to tweets happening in real-time or for the past 7 days and there are limits to the amount of past Tweets that can be extracted using their REST APIs. I have had to Fork and modify an existing GitHub Repo that allows you to perform a more exhaustive search of hashtags/user data over arbitrary date ranges to collect more relevant tweets.

So far, I have been able to create the nodes data set for use with Gephi (open-source visualization tool). I am currently working on creating the edge data set that will show the relationships between Twitter Users using the same hashtags or keywords in their tweets. I am essentially trying to create a Directed Network Graph that can display connections between any keywords/hashtags and Twitter Users over any arbitrary date range (overcoming the limitations of the Twitter API).

This project has taught me a lot about working with APIs, various Python Modules, basic REST-fielding-dissertation, ย some discrete math topics and more so I have been really happy with how it’s turning out. It has also led to me learning more about different aspects of software as it relates to the web. ๐Ÿ™‚

Pics and more detailed source code to come! (hopefully soon)

Small Summer Break

I recently had to travel for my job so I wasn’t able to practice coding for about a week but now that I’m back I started the JavaScript section of the beta FCC curriculum. It has been pretty straightforward so far (after doing work on C and Python) – the syntax is slightly similar to C. I was surprised to see that in JavaScript, numbers and strings can be compared directly, resulting in a boolean? For example, in JavaScript, '1' == 1 the string value “1” and integer value 1 evaluate to true. I will try and use the strict equality/inequality operators to avoid any confusion since I can see how this might lead to weird bugs?

Apart from this, I would like to continue The Learn Enough CSS tutorial, as well as keep working through the applied projects for HTML/CSS on FCC – I am also thinking about working through CS50’s problem sets again as a refresher and to solidify my understanding a bit more. I am still trying to split my time between learning CS concepts and applying them to mini-projects. I still wish I had more time in the day…