Another New Year

Happy new year! This year so far isn’t feeling too much like a new year or a fresh start, in a good way. I’m finding as I grow older that new year’s resolutions are more oppressive than inspiring — every day should be an opportunity to make a new resolution (cue the cheese).

That being said, I do have a running Google doc of things I’d like to focus on:

  • Hack on & build many projects! (prioritizing Fullstack as a main experience, which starts this Saturday)
  • Initiate side projects, be they development related or lettering, design, music or anything else
  • Build faith and focus on becoming closer with God
  • Cultivate the relationships I care most about, both family & friends
  • Cook more & spend less!

As mentioned at a standup show I went to last night, it’s almost ironic how resolutions are meant to be started on January 1 after a lazy languishing period of binging on snacks and Christmas candy and watching Netflix, aka the holiday season. I’m slowly getting back into the groove of things, though - as long as I get started it’s easy to keep going!

On an ending note: I came across this tweet about recording personal victories (small or large) every year. A good practice to keep in mind when we humans tend to dwell on improving the negatives.

Why I Want to Code (A Brief History)

My days of coding in its most elementary form started when I was around 9 or 10, when I first discovered HTML and how it could be used to create web pages much like the ones I interacted with daily. I created a Freewebs account (remember that? I believe it now goes by Webs) and made an About Me page with an accompanying cartoon polar bear image. During my teenage years, I ran with the little HTML and CSS knowledge I hacked together to spruce up my web presence scattered across multiple social networks and helped my friends edit their Myspace or Tumblr themes as well.

Back then, there was very little information or tutorials compared to now, and what did exist seemed so convoluted or irrelevant I wasn’t sure where to begin. So while I used other people’s CSS themes or layouts to dress up my Livejournal or Tumblr and learned my way around editing hex codes and other properties to make it look how I wanted, the thought of making my own themes from scratch (or building an entire website, not a page) was daunting and seemed nearly impossible. When mobile web and apps got big, those were even bigger behemoths that were both awe-inspiring yet so very out-of-reach.

When I got to college, becoming a developer was still a budding dream. I had taken AP Computer Science in high school and thanks to an incredible teacher, learned my way around Java pretty easily. I decided to take the intro CS course at Berkeley, but was soon overwhelmed by the fast pace and workload. In retrospect, it was a class I could have succeeded in but I didn’t know yet that one of the most crucial aspects in learning to code is asking questions to instructors or TAs and coding together with classmates. I was suffering trying to learn by myself and hadn’t used my resources. I was sufficiently discouraged and after that semester, I didn’t approach another CS class despite my growing interest.

Throughout college and into graduation, I stayed interested in the web and took various web production jobs, whether at nonprofits or magazines. Upon graduation I began working at Moda Operandi, quickly transitioning into an email marketing role where I used my HTML & CSS coding skills to build daily emails. There I first learned about responsive designs built for different screen widths and got more comfortable coding within the limits of email (e.g. lots of tables and inline CSS to account for different email clients’ rules). I came to really enjoy testing across different clients and troubleshooting code to make the appearance seamless for all subscribers.

I decided to reignite the flame of going into web development and started going to Meetups and doing various web tutorials, both to strengthen my CSS skills and for other languages such as Javascript and Ruby. Eventually I decided to take the leap and apply for Fullstack Flex to become comfortable and proficient in both front and backend web development, and to have the power to create websites and web apps from scratch.

Throughout the 10+ years I’ve dabbled in coding, the driving force behind my desire to code has been about the ability to create. Similar to writing or drawing, coding gives one the power to make ideas into a tangible reality. It is a tool that anyone can and should learn how to utilize to make their dream phone app, website, or even simple automation tools that simplify one’s workflow. Learning to code started from simply wanting to create a web page about myself and then evolved into wanting to design my blogs in a unique way to differentiate it from standard templates. Now, my desire to learn how to code stems from wanting to be an inventor, either for myself and the various ideas I want to execute or for clients needing design or functionality solutions for their websites.

Another big influence on why I wanted to code comes more recently while working at my job. Fixing and optimizing emails to better engage subscribers is very satisfying, and I would love to take that a step further and learn to optimize functionality and add useful features to our website. I can relate to all of our customers’ frustrations about our product and would love to have the ability to help fix bugs and build features that would ease their experience. Whether that be for work, for outside clients or for myself, optimizing the user experience for web products that people interact with daily is a huge reason for why I want to code.

My road to code for the past 10+ years has been quite convoluted, but my desire to create products and fix problems has not wavered. I am so excited to take a leap and learn the MEAN stack at Fullstack - by the end of six months I aim to have various projects under my belt that I’ve created from scratch and hone my ability to think like a hacker. That being said, I know Fullstack won’t be the end of the road to code: this is just the beginning!

Fullstack Flex Immersive

Today marks a week since the whole of America stuffed their faces with turkey, cranberry sauce, mashed potatoes and related goodness, and also a week since I got accepted to Fullstack Academy’s Flex Immersive!

I’m beyond excited to be part of Fullstack Flex‘s first cohort, a six month part-time coding bootcamp with the same curriculum and concept as their three month full-time immersive. I had been debating the best course of action toward becoming a web developer for a while, but ultimately decided on Flex as the best decision to really accelerate my growth. Below were some of my thought processes while coming to this decision.

#Pros of Flex:

  • Money!: The price of coding bootcamps is no joke - while the ROI will surely pay off, the price of both tuition and cost of living with no income in NYC is a serious investment that deter many people from bootcamps. Flex allows students to keep their income, thus providing a level of financial comfort while still pursuing a career change (a great comfort to my parents!)

  • Flexibility: Similar to reason listed above: potential students might not be willing to leave their jobs altogether or have other commitments during weekdays 9-6, but still want to learn all the skills required of web developers. Flex provides exactly that.

  • Intense Curriculum: One could argue that there are many low cost or free classes and meetups to learn web development. In NYC alone there are a ton of great organizations such as Code Crew or Girl Develop It that provide night or weekend classes, but these are usually more like brief introductions for those looking to get started in a specific language or concept. Recently Codecademy Labs launched in NYC. Labs seems like an incredible low-cost program, but it didn’t fully appeal to me since all work is done strictly within the web browser, and I think it’s important for a curriculum to encourage building projects from scratch and working from the command line as one would in a real job. Flex is the first program I’ve seen that quite literally translates the bootcamp experience into a part time program. The material covered encompasses both front and back end, all Javascript (another very enticing pro of Fullstack). A hefty amount of time is devoted to building projects, both alone and with teams. It also encourages participation in the NY tech scene, participating in hackathons and learning more about startups. Fullstack’s full-time bootcamp appealed to me more than GA, App Academy, Flatiron School, Dev Bootcamp, etc. and the fact they are the first to launch a part-time bootcamp shows how much they are listening to prospective students’ feedback and are ahead of the curve.

#Drawbacks of Flex (at present):

  • First Cohort: The upcoming January cohort will be Flex’s first cohort, so there are no previous success stories or statistics of Flex students graduating and being hired as full-time web developers. I imagine several of the students could be taking the class to build skills to use at their current job as well. Ultimately, I think Fullstack and its founders Nimit and David are very invested in students finding web dev positions and will be closely overseeing Flex to ensure the program’s and students’ success.

  • Work/School Balance: When talking to other prospective students, this was the biggest reason the students were not as interested in the Flex program vs the full-time program. It was simply too hard to work a full time job and also learn to code on nights and weekends. Valid point, and the folks at Fullstack seemed to have taken this into account and lengthened the program from 16 to 24 weeks to ensure all material could be covered at a comfortable pace (plus more time to process and fully grasp concepts!) Whether full-time or part-time, students are going to have to cull down on other obligations and live and breathe code (or live and breathe work and code, in my case).

I hope this helps anyone debating the merits of Flex Immersive! Please feel free to reach out over Twitter if anyone has questions about the process. I’ll be documenting thoughts and progress during the course of the program as well starting in January. I’ll be cracking down on the pre-work course Foundations in the meantime…

A Refresh on Recursion

A couple days ago while working through Javascript problems, I came across my first Javascript recursion problem (or to better phrase it, a problem best solved through recursion). The following problem ArrayAddition is from CoderByte.

Have the function ArrayAddition (arr) take the array of numbers stored in arr and return string true if any combination of numbers in the array can be added up to equal the largest number in the array, otherwise return string false. e.g) [4, 6, 23, 10, 1, 3] should return true since 4+6+10+3 = 23.

This problem completely stumped me. I tried using conditional loops but it quickly became too convoluted. I dreamt (had nightmares?) about this problem. Finally I referred to StackOverflow and the solution presented itself quite simply through recursion.

1
2
3
4
5
6
7
8
9
10
11
12
13
function ArrayAdditionI(arr) { 
var largest = arr.sort(function(a,b){return
a-b}).pop();
function recursion(target, array){
if(array.length === 0){
return target === 0;
}
var n = array[0];
array = array.slice(1);
return recursion(target,array) ||recursion(target-n,array);
}
return recursion(largest,arr);
}

It took me a while to understand the solution itself, but I think the main point is that you search the function either removing one of the numbers or one by one, or recurring over the difference of the largest number and each of the elements. Incredibly clever and powerful - and so much more concise than using conditional loops!

I’m no beginner to recursion having learned the concept in various CS courses in college, but it seems that recursion is a concept that people might seem to think they grasp until they are challenged to write functions using recursion themselves (myself included). It takes a while to go from understanding the concept to properly utilizing it.

Some tips to overcoming the fear of recursion..

  • One of the best ways to understand recursion is to write down all the function calls and values out on paper and understand when the solution is reached. It might be easy to grasp recursion used in factorials but it gets trickier when there’s two or more recursive calls separated by an OR or + operator.
  • Practice, practice, practice! These problems were particularly helpful in solidifying the concept, especially GCD.
  • Make sure you understand base cases and recursive cases. “What is the simplest form of the problem?” is a good jump start to finding your base case.
  • And if you’re a true beginner, remember you can just Google recursion..!

First Steps in Javascript

I started learning Javascript last week in Fullstack Academy’s Javascript for Non-Programmers two week class. I got the hang of it pretty quickly, especially since the syntax is pretty similar to Java (though I am quite out of touch with Java as well, having not touched it since 2007 in high school. Also syntax is where the similarities end). Diving into Javascript makes me realize the power and ease of jQuery even more, but I’m enjoying learning the fundamentals.

Problem sets are a great source of frustration for me, but even more rewarding, fun, and the most superior way to learn. I think using indexOf to test if a character has a non-negative value in a particular string or array was the most rewarding discovery while doing a particular problem set last week. I had originally performed a five way or comparison for the below function but knew there would be a more concise and efficient way to write the function. A couple minutes and some Google searches later, I landed on using indexOf!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function vowelCount(str) {
var count = 0;
var vowels="aeiou";
if (!str) {
console.log("Please input a string");
} else {
for (var i=0;i<str.length;i++) {
str = str.toLowerCase();
if (vowels.indexOf(str[i])>-1) {
count++;
}
}
return count;
}
}

Tomorrow marks the end of the 2 week course and our final project is to build a functional site that encrypts and decrypts tweets based on any alphabet key. I feel totally equipped to tackle it and excited to launch my first mini-functional project! I’m finding Javascript to be a lot more exciting than HTML and CSS thus far and am so eager to continue learning to use it on both front & backend environments.