Showing posts with label Computers. Show all posts
Showing posts with label Computers. Show all posts

Saturday, June 20, 2015

What is a Software Architect?

While there is not yet a universally accepted definition, there are a range of definitions and skills that are beginning converge on a definition. Here's how I define it, and where I think the industry is going with the definition.
Software Architect: A person who does the overall design work for a piece of software, including what core features and functionality it needs to have, and creating the overall design that can accomplish that in a manner that meets the business requirements, including cost, performance, capacity, and time-frame.
This typically includes specifying the modular design, the application programming interface, and may sometimes include specifying the tools, technologies, and and systems to be used to build it. It's analogous to what an architect does for buildings, creates the overall design, appearance, feel, function, materials, etc., but does not actually build it.

However, the architect's work does not end there. As it's being built, the developers and engineers are likely to have questions and/or suggestions for ways to improve it, and the architect must work with them to approve and incorporate such changes, or decide to omit them. There are likely to be changes in the requirements, features, and functionality from the managers/users that the architect must incorporate into the design as it's being built. The architect is also to verify that the implementation fits with the design and work with the implementers to ensure the modules all work together and that the overall system works as intended.

The Software Architect role may include the role of a Business Analyst, that is, gathering and documenting the requirements from users/management, or it may be more of a technical design role that works in conjunction with a Business Analyst, depending upon the qualifications of the Software Architect and the scale/scope of the project. On very large projects, there may be one or more Business Analysts, and potentially multiple Software Architects, with one being the lead architect.

How Does One Become A Software Architect?
In some environments, the person who is the Software Architect may also build/implement parts of the system. That's particularly true in smaller projects where the architect role isn't full-time, however, building the software is not actually the role of the Software Architect, that is the role of the developers/programmers. That one person may perform multiple roles does not alter the roles as I have defined them. In these instances, it's usually a senior programmer/developer that has demonstrated a level of proficiency with designing software over the years, not someone who is primarily a software architect. Indeed, this hybrid role is usually how someone eventually transitions into a role of primarily being a Software Architect.

The Ultimate Realization Of Software Architect.
As the architect becomes less involved in programming, and more involved with the design and business requirements, the specific technologies used to implement the designs become less important to the design. The computer systems, technologies, and languages used for the implementation become matters of cost, performance, reliability, convenience, and timeliness that, while important to the success of the project, aren't critical to the design, and can be interchanged or replaced as technologies and/or needs change. This is the ultimate realization of what constitutes a Software Architect.

What About Other Architect Roles?
This same concept can be applied to other areas of IT, notably, the roles of Database Architect, and Network Architect. As with Software Architect, these roles require extensive technical knowledge, as well as excellent understanding of the business needs the systems will fulfill, however, in most cases, the specific technologies used in the implementation won't be critical to the architecture. The Architect's job is to design a system that can be implemented using any of the available technologies, leaving the technology decisions as business decisions that may change, or be replaced, as the needs and the technologies change, without significantly altering the overall design. However, in the case of these roles, the architect is likely to have more of a hands-on role in choosing the technologies and may be more involved in the implementation than the "ultimate" Software Architect mentioned above.

Related Links:

Tuesday, August 28, 2012

Confessions Of A Math Addict

I have a confession to make. I am a math addict. My parents introduced me to it when I was about 3, and after I tried it a few times, I was hooked. By the time I was 4, I had moved on to the harder stuff, multiplication and division, and I don't just mean 5x3, I was doing the hard stuff, multi-digit multiplication and division, and I didn't need a pencil or paper, just straight to my head.

When my kindergarten teacher found out, wow! He marched me straight down to the vice principal and interrupted a meeting. Needless to say, the VP was shocked to find such a young math addict in his school. My teachers tried to help me, but I was always a step ahead of them. I was doing exponentiation by 2nd grade, algebra by 5th grade, trigonometry by 6th, it seemed that nothing would stop this addiction.

They kept trying to help me, but I just kept right on doing math. Sometimes my grades would drop because I was bored, or didn't like the teacher. They kept putting me in tougher environments, but I just kept on doing it. In jr high, a friend introduced me to computers. I realized these things could make it faster and easier to do really hard math. You know the story, "Hey Geoff, check this out...."

By the time I got to high school, it was really bad, joined a "math club" and started doing "number sense". And, I was completely hooked on computers. My junior year was the worst, I was taking 3 credits of math, second, third, and 4th period, every day, including "computer math".

I was so addicted by my senior year that when I only got a 760 on the SAT math, I decided to do it again because I should have gotten higher. The second time, I hit 800. I was up to doing AP Calculus, the really hard stuff, and still, no one could stop me. I didn't pay attention in class, didn't do my homework, and yet flew through every test they dropped on me. They couldn't catch me or stop me.

But it all came crashing down in college, the hard math there was only available at 8:30 in the morning, and my brain just wasn't working at that hour. They had me doing stuff called Calc II, Calc III, & Differential Equations, and always timed tests. But it wasn't the math that got me, it was those early hours. My brain just can't handle those early hours.

After college, I cut way back on the hard stuff, went back to the basics, including some prime number theory. But I was working as a computer programmer, so I was doing math at work every day, and usually at home on the weekends. I started experimenting with other types of math, hashing, encryption, compression, you name it, I probably experimented with it. It wasn't hard, but without a computer, it would have been very tedious.

Yes, I've been a math addict for over 40 years now, and I don't think I'll ever quit. Parents beware, introducing your children to math at a young age can lead to a lifelong addiction.

P.S. This is a true story, although some of the details might be exact, it's all from memory.

Thursday, June 23, 2011

How and Why I went (almost) Flash free on my Mac

Update 2015-02-05: Since Safari 5.x hasn't been supported in years, I switched to using Chrome and Firefox as my primary browsers several years ago. However, aside from that detail, the rest of this still applies.

I don't like Adobe Flash. I don't have anything against the concept, and it does offer some neat, and occasionally useful capabilities that are difficult to implement using other technologies. However, I got really tired of the need for constant security patches for Flash, the Flash based ads, the performance slowdowns, and the reduced battery life due to all the Flash based content on websites and in ads.

So for the past 6 months, I've gone Flash free on my Mac. To be clear, I'm not really Flash free, I do have Google Chrome with it's built-in (and automatically updated) Flash, but as you'll see below, that's my backup option for those occasions where I really want/need to access some content that requires Flash.

I mostly use Safari 5.x and find it very quick, that's the main reason I switched from Firefox a couple years ago. I deliberately don't have Flash loaded on my machine, and that helps with performance and battery life. When I encounter a site that requires Flash, I either use Chrome (with it's built-in Flash) or I don't use that site. This is simple when you enable the "Develop" menu in Safari, one of the options on that menu is to open a page in any of the other browsers installed in your machine. Not everyone will like that setup, but I've been using it for about 6 months and I like it. Here are instructions for setting it up.

http://daringfireball.net/2010/11/flash_free_and_cheating_with_google_chrome

I use two other Safari extensions. YouTube5, which tells YouTube to send HTML5/H.264 video rather than Flash video, and ClickToPlugin, which makes all other plugins require you to click on the content before it loads. That keeps plugins from slowing down my machine and using extra bandwidth. Here are links to those two.

http://www.verticalforest.com/2010/10/27/youtube5-version-2/
http://hoyois.github.com/safariextensions/clicktoplugin/

Also, since websites logs will show that I don't have Flash installed, it may eventually make them rethink their use of Flash, especially if a lot of people start doing this.

What I end up with is clean, fast browsing, no Flash ads, no extra junk slowing down my machine or using up battery. The trade-off is the minor inconvenience of having to occasionally click on some content to display it or open a page in Chrome. It's a trade-off I'm willing to make. Try it out for a couple weeks, you might find you like it.

Updates:
2011-07-11 - Flash Player "zero day" vulnerabilities exploited in the last 30 days = 3, this year, 6-10. Flash Player is insecure, inefficient, and a high profile target for people trying to compromise your computer.

2011-12-14 - Adobe Flash Player vulnerabilities by year.

2011-12-30 - Mac users, use Flush to remove existing "persistent Flash cookies". Alternatively, you can manually delete all your Flash preferences by deleting this folder:
~/Library/Preferences/Macromedia/Flash Player

2012-01-05 - Safari 5.1.x has significantly more issues than 5.0.x, so after a couple weeks of using 5.1.2, I reverted to 5.0.5.

2012-01-29 - My Windows machines have been using a similar setup for some time. However, Safari for Windows is distinctly inferior to Chrome and Firefox for Windows, so I have standardized on using Chrome for my primary browser for Windows. The Adobe Flash built-in to Chrome 16 on my Windows XP machine was crashing multiple times per week, so I disabled the Flash plug-in and am operating completely without Flash on this machine for now. Since I will need Flash for a few sites, I will probably download Portable Chrome and leave Flash enabled there. That's not as convenient because Chrome doesn't have a handy menu option allowing you to open the page in another browser, but copy & paste of the URL works well.