Five Career Questions to Ask Yourself

The many recent grads that step their foot into the Bay Area to begin their career are highly ambitious, motivated, full of good intentions, and in general, just want to do well. There are many opportunities, meetups, people to talk to, and things to do that revolve around careers, so at times, there are a lot of low-hanging fruits for us to pick. We have a lot of questions. Recently, I hit my six month mark working as a software developer at Looker Data Science. I was very curious about my progress at the company so far – am I hitting my stride? Am I meeting expectations? How and what can I do better moving forward? Have I disappointed? Am I going to be fired today?

 Insert quasi-deep photo of me looking "forward" here (ha ha)

Insert quasi-deep photo of me looking "forward" here (ha ha)

As you can already tell, I had a lot of questions. After speaking with my mentor and manager, I learned that I was asking myself the wrong questions.

One of my favorite things about working at Looker is the culture of mentorship – it is one of the core values of Looker. The first day I joined Looker, Adam Markowitz, a senior engineer at Looker, was assigned as my mentor. I am able to go to Adam and ask him pretty much anything. Mentorship extends to the higher ups as well, as I have weekly one-on-ones with Roland, my manager, to also discuss pretty much anything - my progress, what is stopping me, what I need help on, what is going well, how many dogs I’ve pet, and more.

Recently, I scheduled a lunch chat with Adam to talk about my career. I also told Roland prior to our weekly one-on-one that I wanted to talk about my progress so far in the past six. I prepared a few questions going into each conversation:

1.       What are an engineer’s expectations at Looker, and how does one meet those expectations?

2.       How does one exceed those expectations?

3.       What are some things you wish you learned earlier when you first started your career?

4.       And a super open-ended question – how do you become successful?

While talking to Adam and Roland, one thing is clear – hitting expectations is easy. Hitting expectations as an engineer can be as simple as doing the work assigned to you to the best of your ability, testing your fix or feature to cover many cases, and not rushing to finish in order to make a release. That’s really not that hard.

The parts I was dying to know were – how do I exceed these expectations? How do I become successful working at the company?

To sum it up into one sentence, exceeding expectations is about saving time. Are you saving the company’s time? Are you saving a department’s time? Are you saving someone’s time? Are you saving your own time?

2016-12-28 15.29.24.jpg

After talking to them, I summarized what I learned into five points:

  1. Work on side projects that helps the company in some way

    An example of a side project is the recent Slack bot for Looker created by Wil G, one of our product engineers. Slackbot was a weekend project Wil implemented that ultimately received a ton of use by customers and good press. The use is stupidly simple – you ask a question on Slack, and the Looker Slackbot returns the answer about your data.
     
  2. Check out the open issues an engineer may have on their Github and dive right in

    Every engineer has a task list on their Github. Check out what is an open issue and dive right in (permission may or may not be needed). Before you dive into someone else’s issue, ask yourself – will this issue save not only the engineer’s time, but also someone else’s time? Will it bring the team or company forward? Do note, this is not an excuse to ignore smaller bugs or maintenance issues, so use your best judgement!
     
  3. Just ask

    Talk to fellow coworkers, ask them what they need help in, what is blocking them, what is something they would like to implement, and then work together on this.

    Adam is one of the engineers that works in the performance and scalability side of Looker, something I am also interested in. I talked to Adam expressing my interest in this area, and at the same time, requested with Roland that I would like to work more on projects that involve the performance of Looker. If there is something you are interested in, it doesn’t hurt to ask.
     
  4. Do things that ease the burden of other departments at the company

    Does our customer support team, as an example, have a bottleneck on a certain issue that continuously wastes their precious time? Can you think of a solution and implement it? If so, this could be a good problem to solve. Saving time and providing a solution to a problem is not confined to just the engineering team – if you can ease the burden of another department, it is highly encouraged to do it.
     
  5. Do things that save engineer’s time, where time quite literally is money

    Looker’s dialect unit tests routinely take over two hours to complete. Adam knew this was an issue, so he just went ahead and worked on a fix that optimized the tests to run up 30 to 50% faster. Saving an hour or so time from an engineer is quite literally saving money. That’s huge.

Other than saving someone’s time, all of the previous points also have another thing in common – they are proactive actions. If your company culture permits this sort of attitude, when you see a problem, just go ahead and fix it. No permission needed. No barking at the fence. Just do.

In response to the question of “what are some things you wish you learned earlier when you first started your career”, the general consensus seemed to be that if there’s an opportunity that scares you, will challenge you, and is difficult, you should take it. Leave yourself little room to regret. Also, take maximum advantage of what you have right now, which is time. Invest in your 401k, no matter the amount. The earlier you start, the better.  


It turns out, being successful at the company is about bringing success to the company, the team, and your customers. Here are some questions you can ask yourself to reflect on what you do:

  1. Are you doing things that save someone’s time?
  2. Is it easing a particular burden that someone, some team, or some customer is experiencing?
  3. Are you communicating with others on what should be done?
  4. Is there an inefficiency somewhere that you can provide a solution to? Can you do it?
  5. What am I doing well? What can I do better in?

I entered the conversation with Roland and Adam with questions for them, and I left the conversation with questions for myself. Six months went by quick; I wonder what other questions I will come up with in another six months?

Thank you Christine and Om for editin, and special thanks for Roland Blanton and Adam Markowitz for letting me ask them stupid questions all day every day.

New Year, New Me... Maybe..

Hello all!

Happy New Year!

 Pfeiffer Beach, Big Sur, California

Pfeiffer Beach, Big Sur, California

In June of 2016, I officially graduated from Drexel University and relocated to Silicon Valley to begin my career in software development. I currently work in Santa Cruz at a company called Looker. Looker is an analytics tool that brings data and business teams together by making it easy for everyone to explore and understand the data that drives business. You will definitely hear more about Looker in my future posts, especially since it is quite an exciting time; Looker is growing rapidly.

I have always been a big fan of new years resolutions -- I think it's a great time to consolidate and focus on some core areas to improve on each year. This year is no different. 

One of my goals this year is to write more. I have always written in my personal journals, a ritual that I do (almost) every night to keep track of tasks. I use my journal to analyze my feelings, log what I have done, and reflect on what happened during the day. One reason why I want to blog more is to improve my writing skills. I honestly think I have pretty bad writing, something my girlfriend is trying to help me out with! Another reason is that I just want to. As a result of my own desire to want to write, I think these blog posts will be less forced and come more from the heart. As a result of this desire to write more, I am going to try to publish a blog post every two weeks

I came up with a list of things I plan to write about. In no particular order, here is what I have in mind:
 

  1. Career and work
     
    1. Making an impact in the company you work for

      I intend to discuss with my manager and mentors on defining what "impact" is and how one can make an impact in an organization; perhaps I will provide some personal thoughts and insight on what worked for me as well.
       
    2. Finding your career goals

      What does this mean? I don't really know yet, but it will be interesting to see what exploration will come out of this piece.
       
    3. Finding your passion

      What is passion? Is it possible to combine your career with your passion?
       
    4. Finding the right company to embark in your career

      How should you choose the company you work for (given the choice?). Is it even possible to find a company that has your interests at heart? 
       
    5. Tips on networking

      How do you meet and connect with the people you admire? 
       
    6. Building good company culture

      One of the invisible (and often overlooked factors) factors of a good company is culture. What is good company culture? Is it as simple as having ping pong tables and free food? Not quite. I want to explore this topic by using the company I work for as an example of incredible company culture that radiates to the customers. I plan to interview with various people within Looker including the CEO Frank Bien and Founder Lloyd Tabb on what makes Looker Looker. 
       
  2. Travel
     
    1. Travel hacks

      This will document some of the tips and tricks I use to get lower rates at hotels, cheaper car rentals, better rooms, and more.
       
    2. Travel diaries

      One of my other goals in 2017 is to travel more, and I am excited to document these trips as travel diaries.
       
    3. Why travel? Thoughts and lessons on traveling

      Traveling is more than sightseeing. Traveling allows you to learn more about different cultures, teach you lessons on life, think differently, and feel different things. I am looking to explore the things I have learned through my travels.
       
  3. Investing and wealth management

    This is probably the topic I have the least experience in; I'm just a new grad.

    However, it (evidently) appears that this is the best time to explore options in investments and managing one's wealth. Lessons will come from various online sources as well as talking to people that have more experience in this area.

    I will try to do research on everything from 401K retirement funds, exchanged-traded funds (ETFs), life insurance, education funds, and real estate. 
     
  4. Personal
    1. Goals and resolutions
    2. Personal reflections
    3. Living as someone with exposure to multiple cultures
    4. Hobbies such as cooking (joint post with my girlfriend?), selling sneakers, gaming, and more.

This (incomplete) list should give me a lot of material to start off with!

P.S. there is a glaring lack of topics regarding programming. I am also mostly trying to avoid discussing stuff that is directly related to my work (haha). 

If you are interested in hearing more about other topics or have any comments, feel free to contact me or leave a comment below! 

A big thank you to Christine for editing this post.

 

Thank You for Making Me Uncomfortable

After finally buying my ticket back to school, it dawned me that I'm really about to leave this cruel but exhilarating country that I had the honor to live in for the past six months during my co-op - the longest I've lived in my birth country since I was six years old.

 Testing

China is a formidable country with jaw-dropping infrastructure. It is also a country bursting with opportunities and potential for anyone willing to get their hands dirty and put in the hard work. The pace at which it grows will put you to awe, but if you're lucky enough to be apart of China's growth by living/working in it, you will find yourself grow as rapid as it is as well.

Working at this company in Shanghai, I got to play the role of the project manager, the MC, the QA, the IT guy, the translator, the database manager, the software developer, the consultant, the one responsible for talking to the customers who all spoke Chinese, and more.

I got to meet Christine, Brianna, Duy, and Christina who were my shining beacons of light during the most stressful times of my co-op. I got to play and learn from Jw who is seriously one of the most optimistic, funniest, wise, and 自恋 guy I know. I got to party with my crazy party animal relatives during Chinese New Year, such as not only sharing actual red pockets, but also WeChat/Alipay red pockets, making it the best Chinese New Year of my life [so far].

I got to interact with my family (all many dozens of them; I seem to meet new family members that I've never seen every time I come back), especially my mother and my sister with her ADORABLE son, the longest I ever had, discussing values, sharing stories, and empathizing on the happiness and sorrows.

Coming back to China to co-op finally gave me the opportunity to really grok with my family. I learned to man the hell up and take on the responsibilities of the family. Your parents and elders that you've idolized are just as any human as you are, with their own insecurities, fears, values, and goals in life, just as you do, but they never told you in order to shield and protect you from the world while you grow up.

I learned to tell myself "stay calm, you have nothing to be afraid of", such as when my boss left me for two weeks to the USA during the most vital time of the project launch - before going live. Linda telling me to "take over" when both my project managers and lead developer left the company was something I needed to hear. There's no use bitching or whining when faced with challenges - the only action is to stay calm and keep moving.

I learned that I can achieve the things I want to do and more if I put in the hard work and drive to it. It's no use being just "smart" - you must put in the hard work and passion. People like Bryan, Pally, and Yi Fei exemplifies this idea, and is something I am continuously working to improve by learning from them.

I learned I am so fortunate, spoiled, whether it's from where I get my education, to where I live, the quality of the air I breathe, the safety of the food I eat, and the things I own. I complained when I never realized how fortunate I really am.

Most importantly, I learned to not be afraid to be uncomfortable. To actually crave the feeling of being uncomfortable. Being comfortable means you're satisfied where you are. Being satisfied with where you currently are means you don't see anything within you to improve. And that's not right - there is always something you can improve on within yourself or the place around you. To crave being uncomfortable and expose yourself to uncomfortable situations means you're continually pushing yourself to change your status quo and limits, and define new ones, which you'll destroy once again. One can never stop learning as there should be no such thing as "being satisfied".

The world, in particular China, isn't a fair or soft place. You're not special, your opinion doesn't really matter, and your value is based on how you can help others succeed. And that's totally fine. You learn to be less sensitive and "take it less personally" this way, and that's what most of us should learn, myself included.

There is seriously so much more I can express and so many more people I want to show gratitude to have met/interacted with while interning in China, especially my boss who kicked my ass, took so much of his time to mentor me, and gave me the opportunities to be uncomfortable. I also want to thank my awesome Chinese coworkers like Yimo and Ammad (and many many others that don't have/use Facebook) that were ever patient, kind, funny, and understanding of me. Lunch will be a lot less exciting and stress-relieving when we're not eating 辣客 or 楼澜 in a huge 12-person table.

It's bittersweet to go, but with the end of one chapter in life is the start to another. There is so much in this world for all of us to learn, to improve on, to laugh, to cry, to share - isn't life exciting?

Thank you, China, for making me uncomfortable.

Coven CLI

Coven offers all the news a programmer needs, but have you ever wondered, wouldn't it be awesome if it existed in the command line as well? Are you a total tech hipster and only live in your command line prompt? Or do you just like to pretend you are doing work, but secretly engorging yourself with Hacker News?

You need Coven CLI. It's Coven, in your command line.

 The latest headlines from Hacker News, Lobster, /r/Programming, and Product Hunt, in your command line.

The latest headlines from Hacker News, Lobster, /r/Programming, and Product Hunt, in your command line.

Introduction

Coven CLI is a command line version of the incredible programmer news aggregator coven.link which aggregates news from:

  • Hacker News
  • /r/Programming
  • Lobsters
  • Product Hunt.

Coven CLI is super fast. And contains handy commands like open which opens the post in your browser - all done in the command line.

Get it on Github and start reading now!

Setting up a Symfony2 Project from Total Scratch

Let's go through how we will setup a Symfony2 project from start to beginning! We will be using nice hipster stuff that employers love on automated resumé buzzword screeners (throw a wrench in their system! \o):

  • Vagrant
  • Composer
  • Symfony2 (!)
  • LAMP

This is mostly for myself to reference for other projects, such as this particular one, so if I am missing something, it maybe because I am only writing this for myself. Feel free to contribute, however!

Vagrant

Installing Vagrant

  1. Install the latest version of Vagrant through their downloads page. The latest version fixed that unnecessary issue of manually setting up your private/public keys. Finally, no need to spend five hours setting up Vagrant! Only four.

  2. Since I already have an existing VirtualBox with my choice of virtualization OS cached, I simply need to use the Vagrantfile that I've commited to my scripts repo. Note: Skip this step if you're doing a Symfony 2 project, as the next step will contain the necessary Vagrantfile for Symfony 2.

Setting Up Vagrant with your Tech Stack Stuff using Provisioning (the cool way)

  1. git clone https://github.com/we-bridge/vagrant-ansible-symfony.git

  2. Take the /provisioning/ folder and Vagrantfile file and put it into your project root directory /YourProject/.

  3. Uncomment APPNAME in line 6 of the Vagrantfile and assign your project's name to it.

  4. Change 'config.vm.network "forwarded_port", guest: 80, host: XXXX' to your needs, especially if you have multiple projects

  5. Run vagrant up --provision

The above steps would automagically install all the necessary things onto your Vagrant machine such as PHP, Apache5, and more. Automagically!

Setting Up Vagrant with your Tech Stack Stuff Manually (the un-cool way)

The above step replaces this step, but I am keeping this part so the curious ones like me can understand what is happening during the automation process

Digital Ocean has a really good article on setting up your dev stack aka LAMP.

Note: I condensed Digital Ocean's article and put it here. Please visit their article as well - they did a really good job going through the steps.

The gist is, while in your Vagrant VM:

  1. Update your repo using:

    apt-get update

  2. Install Apache using:

    apt-get install apache2

  3. You can now check if Apache is up and running by going to localhost:xxxx with xxxx being the host port that you've set in your Vagrantfile earlier.

  4. Install MySQL using:

apt-get install mysql-server

  1. At this point MySQL will ask you for a username and password combo. Out of pure laziness just put in root/root. You can easily change this later.

  2. Install PHP:

apt-get install php5 php-pear php5-mysql

  1. Restart Apache2 to see your hard work!

service apache2 restart

Composer

Get the Composer Installer within your Vagrant Machine

  1. Grab the Composer installer composer.phar from this place:

curl -sS https://getcomposer.org/installer | php

  1. Symfony might scream at you in a later step if you keep composer.phar in the root directory, so for precautionary sake, put composer.phar inside /tmp/ like this:

mv composer.phar /tmp

Symfony 2

  1. . Good job for making this far! You're getting close. Finally, install Symfony2 using an already-configured package from We-Bridge:

php /tmp/composer.phar create-project webridge/framework-standard-edition . -vvv

  1. Symfony2 is going to put a lot of files into your project directory, so we can now setup the .gitignore which I have put in my scripts repo. Don't forget to rename the .symfony2_gitignore to .gitignore.

I haven't gone this far yet. I'll update the article as I go.


This article was mirrored from my tracking.tf's Wiki page on Github, with technical consulting from my coworker, our company's senior software architect, Allan Simon.

Git via SSH Asking For Your Password

The Issue

Few days ago, I was trying to git pull origin master from our master branch so I can get the latest version to develop on. Upon entering the command, this blankly (and blinkally) stared at me:

My-MacBook-Pro:branch_name loop$ git pull origin master
git@domain's password:

For the life of me, I have never seen this before. This particular branch worked fine just six days ago! 

I tried various things:

  1. Restarting com.openssh.sshd

  2. Restarting org.openbsd.ssh-agent

  3. Made sure that my public key on Gitlab is the same as my github_rsa.pub, and it indeed was the same.

  4. Uncommented sshd_config's to PasswordAuthentication no

  5. Checked /var/log/authd.log for errors relating to SSH, but nothing relevant came up

None of those fixes helped.

For some reason, Git stopped recognizing my public and private key (which was originally named github_rsa.pub and github_rsa respectively).

Eventually, I broke my silence, and my lovely French coworker Allan told me there's an easy fix - generate a new public/private key pair just for Gitlab.

The Fix

  1. In your favorite command line interface, generate a new SSH key:
    ssh-keygen -t rsa -C "name@domain.com"
    Note: For this scenario, when it prompted me to enter a password, I left it blank, since this key is simply for internal use.
  2. Dump the contents:
    cat ~/.ssh/id_rsa.pub
    
  3. Finally, copy the contents and add to Gitlab.

Pretty simple stuff. Let me know if this helped you in anyway - it seems this issue is quite common with Gitlab.

Resolving Vagrant and VirtualBox "Waiting for VM to Boot" Issue

The Issue

The company I currently work for uses Vagrant (which is awesome) to distribute standardized virtual testing environments. Vagrant is great.. Except when it doesn't work (which is not awesome).

I was a victim of the pretty notorious "waiting for VM to boot" issue that plagued certain configurations/versions of Vagrant. A little example of the help threads out there:

 "Failed to connect VM" issues. Yeah, I tried every single one and more.

"Failed to connect VM" issues. Yeah, I tried every single one and more.

The Fix

I was able to (finally) get the VM to boot.

  1. Boot your VM using the VirtualBox GUI (through either Vagrantfile boot-GUI command, or starting your VM using VirtualBox). Login using "vagrant" and "vagrant" when prompted.

  2. Within the GUI, manually start dhclient using "sudo dhclient eth0 -v". Why is it off by default? I have no idea. I found out that it was off when I tried to "wget" the "private/public keys" in the tutorial above, but was unable to.

  3. Setup your private/public keys using the link provided. My box is a "Debian Linux 3.2.0-4-amd64", so instead of: "/root/.ssh/id_rsa.pub", you have to use "/home/vagrant/.ssh/id_rsa.pub" (and the respective "id_rsa" path for the private key).

    Note: make sure your files have the right permissions. Check using "ls -l path", and change using permissions "chmod". Your machine may not have "/home/vagrant/.ssh/authorized_keys", so create that file with "touch /home/vagrant/.ssh/authorized_keys".

  4. Go to your local machine's command line and reload vagrant using "vagrant reload". It should boot, and no longer hang at "Waiting for VM to Boot."

Let me know if this works for you.

Work, Android Development, and Life

It has been awhile since my previous entry, so I thought I would do a brief update. I've been mostly busy with school. My school tends to strap rockets onto its course work past a particular week, so we all tend to just hold onto our dear lives without seat belts.

I've been applying to jobs, there is a very particular company that I would die to work for. I paid special attention to them, and applied in a more personal fashion. Hoping to hear the good news soon.

I have also been working on an Android app. Something simple. Its creation was partly to learn, and partly to deal with my allergies. I called it Pollen Buddy. Here's a sneak preview:

Transient


There's still some various UI elements to consider, such as putting more emphasis on the weight and importance of the information. I need to make clear what the pollen values mean, so likely a legend (important not to clutter the interface, however). My friend, a graphicDesigner/industrialDesigner/awesomeDude by trade has been giving me some great feedback on what to tweak. Shout out to B. 

The Android development environment certainly was foreign in the beginning. However, I quickly acclimated to the XML-based UI formatting and utilizations of threads for network-based communication. This app uses JSoup to scrape Wunderground pollen data (they don't have an API) which means I cannot do operations within my main thread. So I used an Asynchronous Thread, which was rather interesting!

Life has been pretty good. I've been keeping up with sleep, with social life, with family, with school, and of course, learning every day. 

Discovering Android development really excites me, however. Like I previously said, it was a bit foreign at first, but I can see many doors opening up. I can see myself developing more apps, whether it's to learn or distribute.

Delayed Gratification with College Work

Fortunately for this quarter, I was blessed with a great schedule and class slot times that allows me to have three-day weekends - my Fridays are entirely free! Now, this brings into the subject of whether this is actually a good thing or a bad thing, at least for me..

The latter part of this weekend, Friday and Saturday, I basically just chilled around. I partially completed my programming assignments (learning JFrames..), and today, Sunday, I completed my English assignments. In completing my assignments early for this week, I found the importance of time management and in not becoming behind in completing homework. When I feel rushed, or feel constrained with time, my priorities towards things begin to change. I begin to not do homework for their intended purposes, that is, to learn. If I was constrained with time, I would instead pursue assignments for the sake of completion, or to satisfy an arbitrarily determined due-date. Certainly, the purpose of this journal is not to vent about me being behind with homework or assignment (as a matter of fact, I'm actually ahead of schedule by doing all assignments due this week ahead of time), but it surely stresses the importance of me personally not becoming behind, as my perceived goals change for the worse.

Doing an assignment for completion feels, to me, as if it's an obligation. I must do it, whether I like it or not. However, doing an assignment ahead of time, though generally taking longer and requires more self-rigor, makes it easier for me to see the long term purpose of doing so, that is, for the sake of learning. 

I feel writing this reminds me why I should do assignments ahead of time, despite sometimes feeling procrastination or myopic dopamine fixes (such as video games or doing something else other than work) as a greater, though more short-term, reward.

Ah, yes, delayed gratification is the psychological term I am looking for. Thanks, Psych 101.

A Reflection on Co-op and the Academic System from the Perspective of an Undergraduate

Since coming back to classes from co-op, I have had some time to reflect on my six months working at KT. I wrote down some of my thoughts on both the academic system and working as an undergraduate.

I have to admit, Spring and Summer quarter of 2013 at Drexel, I was in a very depressive state. While I was hyped up as an individual coming back from my first co-op in 2013 since I had the opportunity to work with fascinating technologies such as Node.js and other web technologies, at the same time, I was also naive. Because of the lack of understanding of myself, while I was depressed, I didn't know why. I just felt.. crap. No single thing that generally did bring my spirits up, brought my spirits up, things such as working out or sleeping well.

Post-2013 academic quarter, I worked at KT for six months. Through this experience, the reason to my depression became very clear to me, as working at KT helped me develop a perspective I never had of myself, which in turn allowed me to see the counter-perspective to my temporary depressiveness state in my 2013 academic year. 

It was simple.

A gripe I have with studying at Drexel has to do with the inherent nature of studying at a large school, with the feeling of un-importance or feeling like just a number within the many numbers. Through the combination of the speed, compactness, and rigorousness of Drexel's 10-week quarter's system, on top of studying a major that's known for its difficulty, it is at times easy to lose sense of one's individuality, self-esteem, and pride. While minor to an outsider, getting an unexpectedly low score on an exam that one has prepared for many days, is one of the many blows and chisels to a Drexel engineering student's self-esteem. This loss of individuality is not unique to me; I know many engineering students around me that have at least once slipped into this state.

On the contrary, co-op allows us to demonstrate to the world and school that we are beyond our ability to assign A B C D E on a Scantron sheet or regurgitate the concepts of polymorphism onto a sheet of paper, as if such rote memorization of fundamental programming concepts are of any major functional importance in real life (I am not inferring that knowing polymorphism is bad). Co-op, however, allows us to demonstrate our ability to practically apply what we have learned throughout life, whether we learned it in school, through hobbies, or through seemingly trivial pursuits, to things that matter in the work place, despite at times not feeling so while studying.

Employment also allowed me to observe the limitations of what school can teach, in particular, the skills necessary for a job. Only one course so far at Drexel has had any skill-based contributions to either my first or second co-op. That course is Beginner Java (our one and only real-world-programming course as a sophomore). Knowing this, and in preparation for my third co-op and future employment, I will be taking more programming-related classes and additional electives that have to do with programming. Also knowing the importance of my programming classes, I will be paying extra attention and putting more passion and hard work into them.

Another goal that I have reached through this co-op really has to do with an inherent confidence of knowing an approximate career path. Though I critique the academic system's inherent negative cause-and-effect on a student, I really appreciate its co-op system that allows a student, early on, while studying, to know whether or not a particular major or career path is for them. Some students may not be so lucky in that on their first co-op they know this major isn't for them, I feel my first and second co-op has revealed a great deal of what I want to do when I graduate and beyond -- software development.

Make Eclipse Look and Work More Like Visual Studio!

Why Does It Matter?

Working at Kieran Timberlake's Research Group for the past six months, I had the opportunity to work with C# and Visual Studio 2013 creating Grasshopper 3D components with the intent for public release.

We did release [a small part] of my internal work at KT to the Food4Rhino app store. KT Tools for Grasshopper 3D can be found here. Feel free to check it out (and give it a positive review!)

My six months at KT went by so fast. Much was learned, whether it was personal or technical development. A terrific assessment was also given to me, which humbles me and makes my heart flutter. This is a topic I will address perhaps in another blog post. 

Using Visual Studio 2013 for six months, I fell in love with a lot of its features. When you use an IDE or language for a long time, you tend to get used to some of its idiosyncrasies, like its syntax highlighting colors, its whitespace formatting, or its code completion ala IntelliSense

Let me share with you how I made Eclipse both look and work more like Visual Studio.

The Visual Studio Color Theme

As previously described, it's easy to get used to certain colors or visuals that convey different information; the unique way our brain makes visual connections subconsciously to things you use daily. Coming back to Eclipse, of course, everything was entirely different to my muscle memory and brain.

First thing I did was change the color theme back to what I am used to.

 Install Eclipse Color Theme under the Eclipse Marketplace.

Install Eclipse Color Theme under the Eclipse Marketplace.

  1. In Eclipse -> Help -> Eclipse Marketplace, you want to download the Eclipse Color Themes plugin. 
  2. Download the Visual Studio 2010 theme made by Volodymyr.
  3. Import it under Preferences -> General -> Appearances -> Color Theme (this tree will only appear if you installed the Eclipse Color Theme plugin!)
  4. Restart Eclipse, and voila. Visual Studio-style syntax colors.
 Import the Visual Studio theme.

Import the Visual Studio theme.

Whitespace

You like whitespace, right? I like white space. I like knowing exactly where all my brackets are, because they are literally in their own line. I like that I can skim through my code really fast.

I don't like this:

 Lack of whitespace.

Lack of whitespace.

I really like this:

 Lack of lack-of whitespace.

Lack of lack-of whitespace.

Fortunately, my Yellow Belt in Google-fu landed me on the article Making Eclipse more like Visual Studio (deja vu). The author Daniel conveniently shares with us his Eclipse formatting configurations that you can directly import into Eclipse.

  1. Download the config here.
  2. Import the .xml file under Preferences -> Java -> Code Style -> Formatter
  3. Voila. Whitespace for your viewing and skimming pleasure.
 Import the whitespace XML file under the "Java -> Code Style -> Formatter" section.

Import the whitespace XML file under the "Java -> Code Style -> Formatter" section.

Lastly, the pièce de résistance of this article, and definitely something I feel happy about finding again.

IntelliSense

Intellisense is the fancy name for Visual Studio's code completion.

 Demonstrating Visual Studio's Intellisense.

Demonstrating Visual Studio's Intellisense.

IntelliSense, with its consideration to the visual identification of whether something is a property, a method, or more, alongside its code suggestions depending on what you have typed in, is a tool that once you've used for good while, it is impossible not to love.

Coming back to Eclipse (or more so, NetBeans, which is the IDE we used in Beginner Java), I was really thrown back at the lack of good, fast, helpful code completion. Eclipse was either too slow, or didn't suggest the right code depending on what you type, and just plain sucked.

So I did what any software developer would do - I Googled "eclipse intellisense". 

 User Tony from  StackOverflow  with the suggestion of using this string as autocomplete triggers for Java.

User Tony from StackOverflow with the suggestion of using this string as autocomplete triggers for Java.

Here's how to get IntelliSense-like Eclipsense working in Eclipse.

 Navigate to Java -> Editor -> Content Assist, and change the values under "Auto Activation".

Navigate to Java -> Editor -> Content Assist, and change the values under "Auto Activation".

  1. Navigate to Preferences -> Java -> Editor -> Content Assist
  2. Under "Auto Activation", you want to set "Auto activation delay (ms)" to "0", and set the "Auto activation triggers for Java" to:
    .(abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
  3. Click OK.

Ah.. Just like Visual Studio 2013..

 Other than the icon, one can barely tell the difference between this and Visual Studio.

Other than the icon, one can barely tell the difference between this and Visual Studio.

Having access to the JavaDocs while typing up your code is a God send. All the convenience of documentation without clunky keyboard shortcuts or hovering over methods or waiting for the code suggestion to pop up.

More IntelliSense-like Behavior

Visual Studio's IntelliSense also has string highlighting as you type, something that is not part of the stock behavior of Eclipse. To get this type of highlighting, I found Eclipse Code Recommenders in the Eclipse Marketplace.

 Install the Eclipse Code Recommenders for string highlighting as you type.

Install the Eclipse Code Recommenders for string highlighting as you type.

Simply download it from the Eclipse Marketplace. There's not much configuring needed; stock behavior of Code Recommenders is good enough.

 Auto-completion of the getGraphics() method if you type in "getG" and press "space". Also shown is the syntax highlighting feature. 

Auto-completion of the getGraphics() method if you type in "getG" and press "space". Also shown is the syntax highlighting feature. 

Wrap Up

This certainly isn't the end of this article.

As I find more ways to help myself make coding more convenient, I'll add to this article.

At this point, I can think of a myriad of ways for Eclipse to work and look more the way I want it to. On the top of my head, I would love to change the atrocious icon sets of Eclipse (seriously, bubble-like icons with bevel and emboss in the 21st century? YUCK!) to the descriptive icon sets of Visual Studio. 

 Verbose icons for methods, properties and variables and more.

Verbose icons for methods, properties and variables and more.

I have personally gotten used to how Visual Studio conveys whether a suggestion is a method, a property, a variable, or more.. For example, the wrench indicates a property, while the purple box is a method. So simple, but so descriptive. Further reading of VS' icons here

In a way, that's just a personal preference kind of thing. If you've been using Eclipse for a long time, I am sure you are more used to the way it visually indicates X Y or Z. All personal preference! 

Final Wrap Up

I followed a good deal of Visual Studio's development process in its blog. There were some serious UX considerations for its development. No offense to the Java IDE development team (likely other than IntelliJ), but considering how a user uses your product and designing/architecting around it is important as well. Basic UX and UI principles are easily learnable through a simple Google. It's inexcusable your interface looks like a 1990's mess!

Who is Jacky?

Jacky is a Bachelor of Science Computer Engineering and Computer Science Minor pre-Junior currently studying at a school in the East coast United States. He loves writing software, reading up on good user experience, and sharing his experience with whomever is willing to listen to his endless blabbering. Feel free to contact him via his contact form or connect at Github!