I do not allow people to use Telnet on servers that I manage, because usernames and passwords are transmitted over the network as clear text. As concerned about security as people are, I am surprised at peoples’ insistence on using FTP. FTP, a network protocol that also transmits password information as clear text, continues to be widely used. Problems arise in the use of FTP when firewalls are set up between clients and servers. For example, giving clients the option to use either active or passive modes creates more headaches for network administrators who may already have configured FTP servers to listen on specific ports that firewalls are configured to expose. Even more problems are apparent when trying to use FTP over a tunnel.
FTP is broken. Stop using it and adopt secure file transfers with SFTP. FileZilla is an open source SFTP client for Microsoft Windows. Other graphical SFTP clients that support other operating systems are also available.
My sister received a 25USD Borders gift card that she intended to use for another medical dictionary. I persuaded her to regift it to me, and I have been carrying it for weeks. I’ve been to Borders multiple times, and only the appeal of instant gratification kept me coming back. I have been wanting Richard Stevens’ Unix Network Programming, Volume 1: The Sockets Networking API for awhile. I am pretty familiar with sockets programming, having majored in computer science with a specialization in networks and distributed systems, but I am bothered by not having read such a classical text for its field. A traditional Borders store sells the book at cover price: 74.99USD. Buying the book at cover price was not very appealing. Borders.com, powered by Amazon.com, sells the book for 52.49USD, and after applying the 25USD gift card, I was able to purchase the 75USD book for 27.49USD. Averting instant gratification saved me (74.99 * 1.0825 – 52.49 =) 28.69USD!
The question about my greatest weakness has been raised in almost all my job interviews. Many books on job interviews discourage people from construing a strength as a weakness. One of my greatest weaknesses is my drive for perfection. When I perform a task, I want its completion to approximate perfection. Paying attention to details in workmanship and quality is viewed by many people as a positive characteristic for an employee. Being obsessed and compulsive about achieving perfection at the levels that are satisfactory to me actually serves as a big drawback.
My high school English teacher made me aware of my perfectionist nature. She told me that my persistent drive toward perfection would be a source of many failures. With the memory of her warning imprinted on my mind and some introspection, it is easy for me to remember instances when perfectionism caused failure. I state that perfectionism is my greatest weakness for this reason.
As a project milestone draws near, I feel my desire for perfection resurface. My apparent options are to continue developing an environment that will simplify future tasks with the cost of missing the milestone or delay the development of the environment, switch to a brute-force coding effort, and attempt to reach a milestone with a low probability of success. I believe that game theory calls this a “lose-lose” situation. I am, however, driven to lose this situation in such a way that winning future situations is easier.
Although I see perfectionism as one of my shortcomings, I believe that perfectionism or the desire to make future tasks easier is appropriate for the current situation. Sometimes, perfectionism serves as an acceptable heuristic for finding the best path to an optimal solution. One adage that I saw on a whiteboard at a previous company is “do things right the first time.” I shall commit myself to doing just that.
Just know that when it comes down to the wire, it’s just garbage in and garbage out. Reducing the implementation of software to the practice of accepting data from somewhere and preparing it to be used elsewhere has certainly helped me hit the ground running and get up to speed with existing projects.
Before setting resolutions for 2007, I should reflect on my 2006 resolutions of organizing, rethinking, focusing, and succeeding. Workspace organization has improved incrementally throughout the year, and it continues to be a work in progress. I have placed much effort in minimizing my drive for perfection and made myself more comfortable in dealing with systems that are less than ideal. I also started minimizing schedule risk while continually developing solutions by having functional implementations available when schedule milestones are reached. Throughout the year, I’ve been fairly focused on achieving my primary objectives. I have not given much time to other computing interests such as computer graphics programming and open source development. Success that was achieved in 2006 is based on an avoidance of total failure.
Now, for 2007, I will begin allowing myself to fully depend on others. I did not have the ability to depend on others, because of project time or quality constraints. Lack of team involvement will be minimized or eliminated in future projects through sufficient project documentation, subsystem modularization, and module-based implementation assignments. More people will be involved in the research and development of software modules. Localizing knowledge of a system to an individual with an inability to transfer that knowledge to others is a mistake that must be countered this year, and project documentation that is more meaningful will help significantly.
I need to displace some project accountability from myself. Although there may be an increase in schedule and quality risks for future projects, the determination of the team’s successes and failures will be more distributed within the team and less concentrated on me. The team should not fail, because I fail. It should fail, because the entire team failed. This is not to say that I am looking to shirk responsibility. I am merely opening myself to sharing more of the responsibility with others. I will depend on the team to deliver what is requested as the team depends on me to provide them with what is needed.