So, what’s the expertise of this “Developer Guy”?
- Web Development
- C#, ASP.NET, ASP.NET Core – MVC, Web API, Web Forms, just about everything ASP.NET related
- jQuery – mostly Love Relationship
- React – for building SPA or Widgets
- HTML, CSS, Bootstrap, WordPress, etc.
- ASP, PHP, PERL – even now sometimes need to revisit legacy code for small fixes
- Backend Development
- Windows Services Development
- Microsoft Message Queue
- IIS ASP.NET/ASP.NET Core Web Application with Background Threads
- Windows Task Scheduler Automation
- Desktop Development
- Microsoft .NET and .NET Framework Windows Forms
- Windows Presentation Foundation (WPF)
- Silverlight – Recently I had to rebuild all these apps as SPA Web Application
- Microsoft Access – Custom Projects and ADP for simple data access layer
- Mobile Development
- Android – Android Studio or Visual Studio with Xamarin
- iOS – XCode or Visual Studio with Xamarin and an obligatory Mac
- Windows Phone – may it rest in piece
- Mobile-friendly responsive websites
- Integrated Development Environments – IDEs
- Visual Studio – 2002 thru 2022 – favorite IDA
- Visual Studio Code – favorite editor when not using Visual Studio for ASP.NET
- Android Studio
- IntelliJ IDEA
- Eclipse – very long time ago
- HTML Designers – VS Code, Dreamweaver, Expression Web, etc.
- Programming Languages
- Visual Basic and Visual Basic.Net
- T-SQL – when trying to squeeze the last bit of performance from the SQL Server
- PL-SQL – when Oracle is an existing DB platform
- C++ – in the distant past
- Database Engines
- Microsoft SQL Server – from version 7.0 to version 2022
- Oracle – on and off over the years
- Object Database Engine – Java Based
- Servers Setup, Maintenance & Troubleshooting
- Windows Servers – from Windows Server NT 3.51 to Windows Server 2016
- Linux Servers – RedHat/Fedora, Ubuntu, Solaris, FreeBSD
- VMware and Hyper-V Host and Guest Setup and Maintenance
- Microsoft Commerce Server – once upon a time
- General Office User Support
- Windows PCs, Laptops, macOS hardware, Linux
- Office Phone Setup ad Maintenance – VoIP Phones, Hosted VoIP services
- Office Information Backup/Restore procedures, Disaster Recovery procedures
- User Support!
- Cisco IOS Router Setup
- Cisco PIX Firewalls
- LAN & WAN Setup
- Load-Balancers – Software and Hardware
- Content Cache engines
- Microsoft Word 🙂
I have started in Information Technology with Web Development – built my first website back in 1994. I remember HTML 1.0 just added <TABLE> tag and best web browser at the time Netscate Navigator had just started to support it. As a result my new website was “stunning” with new tabular layout and menus 🙂
Since then I have charted a course thru various web development technologies and methodologies. First used the programming language of PERL – was doing my development on Windows NT workstation and deploying to AT&T version of Unix, then ASP, PHP, JSP (as part of J2EE) and with the first introduction of ASP.NET has been using it as my preferred choice for Web Development.
I try not to pigeon whole myself into a specific technology just because it happens to be my favorite or that I am most familiar with it. Each new project requires a careful analysis of that client’s infrastructure, what his projects specific needs are, what technologies his stuff can adequately support and maintain after I have finished and delivered the code, etc. As a result I use the best combination of technology suitable for my client; though luckily now days ASP.NET MVC/Web API (with MS-SQL) are pretty commonly accepted as first choice option, with PHP/MySQL being second most popular choice.
In the end it’s the customer’s needs that drive my selection of Web Development choices for their projects – it’s true what they say: Customer is ALWAYS RIGHT!
Again, my philosophy is – have the project needs and requirements define the technology and tools choices, and NOT favorite technologies and tools define the project.
My journey into Mobile Development started almost by accident. After many years of building Web Application and Enterprise Software I needed to make sure the applications I build were accessible from mobile devices. So, first came the need to make mobile friendly websites. At first I was using “Adaptive” design approach – detecting the browser and it’s capabilities and selecting a version of the website that best suited that device. This approach was not without it’s merits, but it sure became unmanageable due to the increasing number or mobile platforms and devices. Then came “Responsive” design approach which thankfully took out a lot of the pain from creating multiple version of the web application. But, still mobile websites of the past were lagging in features from their Desktop version.
Enter native Mobile Development. Most of my development for mobile platforms is line of business applications – these “Apps” are simply an extension of the enterprise software trying to reach to the mobile audience. Now, almost every project needs to have in addition to their mobile-friendly website – native “Apps” for Android and iOS.
I prefer using the native development environment for each mobile platform, Android Studio for Android Development and Xcode on a mac for iOS development. However, the latest Xamarin for Visual Studio hold a lot of promise and I am tempted to use it instead. Time will tell which approach will be most productive, but I suspect that again “it will depend” on each project requirements.
Desktop development was all the rage over a decade ago, but to be honest once the web technologies like ASP.NET, PHP or J2EE became mature then preference was to write web applications instead of desktop applications. Just the issue of only upgrading the server code and not having to worry if any of the customers are running outdated desktop application that has either bugs or even worse some security vulnerabilities. This whole situation of starting to write desktop applications aka native applications in C++, Visual Basic and then .NET or Java, then gradually migrating to centralized application development as web applications and then coming back into a full circle now with native mobile applications tells of how uncertain and fast changing our industry is.
I am still very much in favor of writing web applications whenever possible, but for all of the advancements of the mobile platforms, the mobile websites simply do not have the features and flexibility of the native apps. Who knows, maybe in another decade some other form of mobile “web” development technology will gain foothold and again will start another paradigm shift. For now though my desktop development is mostly limited to some console apps and utilities used mostly for maintenance purposes – the rest has moved into a Web and Mobile applications.
For almost every web, desktop or mobile development project I’ve also had to create some kind of back-end services. I would even go as far as saying putting together a “killer” Website or a mobile App without a properly designed and functioning back-end services will most likely cause your client’s customer to reject or refuse to use this “killer” application. Degradation of performance in the Websites and Apps often is the result of poor architectural and design choices on the back-end. Most of the time when clients approach me with their application requirements, they are talking about the front-end – what their customers will see and use as part of their day-to-day usage of the application. It is up to me to infer that these front-end requirements will need as some sort of supporting infrastructure to deliver on performance and features.
I try to understand the overall goal of the project so that I can properly recommend and design the supporting infrastructure and services. Very often this ends up being a separate set of WEB Api’s, Console Applications running some maintenance tasks daily/weekly/monthly, possible Windows Services, etc. Luckily for the back-end most clients are more flexible about how to build the back-end – what choice of technology to use (like ASP.NET, MS-SQL) and where and how to deploy them (local servers, into Microsoft Azure or Amazon AWS, etc.).
Back-end development seems sometimes like a thankless part of the job. Some clients are not technical enough to appreciate the need for this, and since it does not have a visible part like a web interface, clients wonder what are they paying for. It’s important for the architect of the system to properly explain the importance of getting back-end right or the whole project will suffer. Ultimately the Client is always right and I will always accept their requirements, but it’s my job to explain to the Client that sometimes things you don’t see are the once that will kill you!
Integrated Development Environments – IDEs
My favorite Integrated Development Environment is Visual Studio. I have been using Visual Studio since it’s original version 2002 and it has only gotten better. If client was to give me carte blanche I would choose
- Visual Studio 2017
- C# as development language
- Final Deployment into Microsoft Azure for Websites and Services
- Visual Studio Xamarin for simpler LOB Mobile App development
- I would still user Android Studio or Xcode for heavy lifting
Visual Studio now support more than just C# development; it’s pretty good for HTML/CSS + JQuery, PHP development for deployment into LAMP or WAMP, SQL development targeting MS-SQL or even other SQL databases like Oracle or MySQL.
I do use other IDEs as well – Xcode and Android Studio are pretty good alternatives, but for best over all experience I still prefer Visual Studio.
Other choices are NetBeans and Eclipse; but I use them only when I have to – if customer already has a project built in that tool and it’s easier to use the same tool rather than migrate.
C# is by far my preferred choice for software development.
Regarding Java: since Android has taken off I had to brush up on Java again as that’s what I use inside Android Studio. I had almost given up on Java in mid 2000s – not too many people were requesting J2EE over ASP.NET, but starting in around 2008 Java again gained prominence when Android became a popular platform. Java and very close to C# so switching from Visual Studio C# to Android Studio Java is not very troubling.
Swift vs Objective-C: winner Swift. Here again Swift is much like C# so the learning curve of switching from C# to Swift is not very painful.
Over the years I’ve had to use many different platforms and languages: ASP, PHP, PERL, Python, obligatory Visual Basic and even some Visual Basic.NET, etc. I am pretty sure over next few years I’ll have to learn few more; nothing ever stand still in Information Technology and if we cannot adopt and learn new stuff – that’s when you know it’s time to throw in the towel.
Almost every Software Application now uses a database. Even the simplest game on the phone will need some kind of back-end database if it tries to monetize and make a profit. Basically we need to store and access data as part of our routine.
My preferred relational database of choice is Microsoft SQL server. I’ve been using MS SQL server since version 7.0 back in 1998/1999. Since my first time installing it and using it’s GUI to create databases, tables and designing queries – I think this was the best tool to use for Database Design. I use the MS SQL’s View Designer and Diagram Designer are in my opinion some of the best tools to help visualize the data model, explore the data and create/update stored procedures, triggers, functions etc. Granted with the LINQ (Line Integrated Query language) to SQL and Entity Framework I write less raw queries, but still the MS SQL Tools are some of the best in the market. Every other year Microsoft keeps adding new and truly exiting features to their SQL engine: In-Memory OLTP, native JSON support, Geo-special data, Always-Encrypted, etc. Unless something drastic changes MS SQL is still my database engine of choice for some time to come. Check out a notable project I did with heavy load on MS SQL Server.
Another part of MS SQL I prefer over lets say Oracle is multiple databases per same instance of the database engine. Multiple databases allow for very nice separation for each Customer, each Website, each … whatever needs a separate data island. MySQL by the way is the same way – I can have multiple databases for the same database engine; that’s why Web Hosting companies offer MS SQL or MySQL as database engines. I have yet to see a Web Hosting company that offers Oracle database as part of they website hosting package.
I have also used Oracle – nice and robust database engine, just very expensive. If I need to scale to some astronomical performance then I would recommend Oracle, but anything short of that, MS SQL (and MySQL as an alternative) would be my recommendations.
Some of the other databases I’ve used over the years are: PostgreSQL, Ingres and even an Object-Oriented Database (used in 1998-2000 with Java so don’t remember the name):
- PostgreSQL’s notable advantage has the best Geo-special data support, and it has probably gotten better since I’ve used it last.
- Ingres – database engine originally from Computer Associates; somewhat clunky and not terribly exiting.
Servers Setup, Maintenance & Troubleshooting
Almost as early as I started writing code, mainly website code in PERL, I had to worry about setting up my own development and then testing hosting environment for get website ready for final deployment. This meant I needed to get up to speed about Servers and Web Hosting Software.
First website I wrote was in 1995 and was pure HTML. I didn’t need my own server for this site, simply write the HTML and publish via FTP to review. But some time after that I had to write my first dynamic website. My programming choices were ONLY PERL. I had to setup my own Windows NT 4.0 Server machine with IIS and install PERL as CGI engine to write my web application. Then after testing it locally I would deploy it to AT&T Unix hosting server to expose the web application. I had to quickly getup to speed in setting up and maintaining Windows Server and Internet Information Server (IIS). At the time I didn’t have a support contract with Microsoft and NO GOOGLE! I still have the Mastering Windows NT 4.0 Server and PERL books. I made a lot of trip to local Barnes and Noble- I count afford to buy all the books that came in handy.
I remember on this IIS/PERL to UNIX/PERL project there was a compatibility issue with an existing UPLOAD File script – would work OK on my Windows/IIS/PERL machine, but would fail on AT&T UNIX/Apache/PERL server. I spend many hours trying to pinpoint the issue of a specific website feature not working – I had to re-write the UPLOAD File PERL script to fix the issue. Nothing is as a good a teacher as necessity and a time crunch.
Ever since that experience I realized that if I want to write good code and verifiable prove that my code works as intended I had to be able to setup my own Network/Server/Web Site and then deploy the code to prove that everything works OK. Numerous times I had to deal with a System or Network Administrator who would claim that my code is “BAD” because of issues when deployed to the target network or servers. When that happens I would setup “CLEAN” network/servers hosting environment and prove that code works as expected. Only then I would get cooperation to resolve existing Network/Server issues. Several of my colleagues who while good coders are not very friendly with Networking or Server setup would be at a great dis-advantage not being able to defend their work, and having to spend countless hours trying to prove themselves right.
Since those early days I have dealt with many different version of servers, Windows Servers from NT 3.51 to 2016, different flavors of Unix like FreeBSD, various Linux versions, Solaris (both in SPARC and PC), and even MAC OS X Server on one occasion. Nowadays with Virtualization technology it’s much easier to setup and get familiar with new Windows Software releases. I often boot my VMWare Workstation or Hyper-V to install a new Server OS to check for myself new features and/or setup options.
General Office User Support
My journey in computer support stated back many years ago, while I was still working at Metropolitan Water District back in 1995. First you start fixing your own computer, then fixing computers for other in your department, then work on server, and so on. Ever since then I have been supporting office PCs, Servers, Networking equipment in every job I have held.
Some of my colleagues are not too please with end user support. Personally I like that part of my job. Helping people with their problems like someone cannot print, another use can’t open outlook or yet someone internet access is not working right is at time really satisfying. It may not be glamorous or make you feel like you are changing the world, but it does make a difference to that user and at times, especially in the middle of a long running brutal project, is a very nice distraction!
As as with Servers when writing distributed enterprise application it helps to understand the networking that will support your applications. Network Administrator could be very sensitive to new applications adding load to their systems and unless you are able to explain why your code is doing something and how the network is or should handle this you’ll spend a lot of time needlessly arguing with client’s network support staff.
Everything from existing Network Design to changes/updates to support new Web Applications should be analyzed and presented to the client as early in the project as possible. Possible considerations are:
- Network Security
- Private <=> DMZ <=> Public Network Layout
- Security Layer – is there an Authentication and Authorization authority already present. Should we add one?
- What’s the expected Load on the Servers and Network
- Is there a need to Load Balance across Web Servers
- Do we need Local or Distributed Cache engines
While none of the above make much different to the actual coding effort, the answers to these questions will impact the architecture of any distributed application and have to considered as easrly as possible. I believe my long and varied experience in Information Technology as a whole allows me to provide a well rounded solution to my clients and not just deliver a Web Application that may not work well or even at all.
Microsoft Word 🙂
I know Microsoft Word! Well at least I think I do.
There’s a funny story behind this. Number of years back I was asked to review someone’s resume and give an opinion about the applicant’s skill level. The person was applying for a System Administrator type position. In the resume he had the usual Server setup skills, Networking Skills, Project Management Skills, etc. Overall a regular vanilla resume – which does not tell me that much, but would get the guy an interview.
However, one item in the resume caught my eye: one of the bullet items in the Resume was “Microsoft Word”. Imagine a bullet list like this:
- Windows Server Setup and Maintenance
- Networking Setup – Routers, Hubs and Switches
- VPN setup
- Website Administration
- Microsoft Word
It just seemed that someone is equating the Microsoft Word skills to that of the rest of the bullet list items. I am not sure that’s a valid comparison. But then again, in case I am wrong and in an effort to cover all the basics, I also claim to know Microsoft Word 🙂