Amerika’da Yazılımcılık – Vize Türleri

Merhaba arkadaşlar.

Bu yazıda Amerika’da çalışma izni sağlayan vize türlerinin en yaygın olanlarından bahsedeceğim. Bu yazı dizisi bilgisayar/yazılım mühendislerine yönelik olsa da vize türleri konusu çoğu meslek için aynı. Ancak şunu da söylemem lazım, burada anlatılanlar kısa bilgilendirmelerden ibaret olacak. Her bir seçenek için detaylı kurallar ve geçmeniz gereken süreçler olduğunu unutmayın.

F1 üzerinden OPT

Amerika’da bulunan Türklerin büyük bir kısmı F1 yani öğrenci vizesine sahip. F1 vizesinin nasıl alındığına çok girmeyeceğim ama özetle ABD’de belli şartları sağlayan yükseköğretim kurumlarından birisinden kabul alıp vizeye başvuru/onay süreçlerini tamamlamanız gerekiyor. ABD’de bir yükseköğretim kurumunda öğrenim gördüğünüz sırada veya mezun olduktan sonra OPT (Optional Practical Training) denilen ve size geçici olarak çalışma hakkı sağlayan bir programdan faydalanabiliyorsunuz. Burada önemli olan bir detay şu: çalıştığınız iş okuduğuz alanla direk alakalı olmalı. Zaten bu programın amacı da öğrencilere okudukları alanla ilgili iş tecrübesi kazandırmak. Alternatif olarak okuduğunuz alanla ilgili bir iş fikriniz varsa kendi şirketinizi de kurabilirsiniz. Ancak bu prosedürü daha ağır bir seçenek olduğu için çok iyi araştırmak ve planlı olmak şart.

OPT ile çalışma hakkınız 12 ay, ancak belli bölümlerde okuyan/mezun olmuş kişiler bunu 24 ay daha uzatabiliyorlar. Bu uzatmayı alabilmek için çalıştığınız şirketin de E-Verify denilen sistemi kullanıyor olması gerekmekte. Bu sebeple eğer OPT alıp sonra da uzatmak gibi bir planınız varsa işvereni buna göre seçmek gerekiyor. Hangi bölümlerde okuyanların bu uzatma hakkına sahip olduğunu öğrenmek için buraya bakabilirsiniz. (Spoiler: çoğu mühendislik, bilgisayar, programlama, yapay zeka vs alanlarında okuyanlar bu uzatma hakkına sahip)

OPT ile ilgili önemli başka bir konu da zamanlama. OPT programına belli zaman aralıklarında başvuru yapabiliyorsunuz. Yani okul bitsin de bakarız gibi bir hataya düşmeyin. Mutlaka okulunuzla görüşüp bu detayları öğrenin ki sonra başınız ağrımasın. Bu zamanlama konusu ve OPT programıyla ilgili diğer güncel bilgileri bu sayfadan görebilirsiniz.

Şunu da söylemek lazım, OPT bir vize değil. F1 vizesine sahip ve gerekli koşulları sağlayan öğrencilere geçici olarak çalışma hakkı sunan bir program. Eninde sonunda bu süre biteceği için, eğer ABD’de kalıp çalışmaya devam etmek istiyorsanız OPT ile çalışırken H1-B gibi bir çalışma vizesine geçmeniz gerekiyor. Bir sonraki başlıkta bunu inceleyeceğiz.

H-1B

H-1B ABD’de geçici olarak çalışma hakkı sağlayan bir vize türü. Bu vize ancak işveren sponsor olursa alınabiliyor, yani bireysel olarak başvuramıyorsunuz. Tabi her meslek de bundan faydalanamıyor. En azından lisans seviyesinde bir eğitim seviyesi gerektiren bir meslekse ve siz de bu meslekte yetkin olduğunuzu bir diploma vs. ile kanıtlayabiliyorsanız o zaman bir şirket size sponsor olup bu vizeyi alabiliyor. Bu diplomanın ABD’deki bir eğitim kurumundan alınmasına gerek yok. Türkiye’de aldığınız diploma yeterli olabiliyor ancak bu durumda başvuru sırasında denklik alabilmek için ek evraklar sunmanız gerekiyor.

Bu vizenin problemli taraflarından bir tanesi her sene belli bir kotası olması. Her sene 65 bin lisans, 20 bin de yüksek lisans eğitimi gerektiren pozisyonlar için toplamda 85 bin vize veriliyor. Son senelerde bu vizeye olan aşırı talepten ötürü, dağıtılacak 85 bin vize için bunun çok daha fazlası başvuru kabul ediliyor ve sonrasında kurayla değerlendirilecek 85 bin başvuru belirleniyor. Maalesef kurada çıkmayanlar şansına küsüp bir sonraki seneyi bekliyor. Nisan ayının ilk iş günü açılan başvurular genelde birkaç gün sonra kapanıyor, yani başvuru yapabileceğiniz (şirket avukatları aracılığıyla) aralık çok da geniş değil. Dolayısıyla bunu önceden planlamak en iyisi. Unutmadan söyleyelim, bu bahsettiğim kotadan muaf olan bir iki istisna sektör de var. Yükseköğretim kurumları veya kar amacı gütmeyen kuruluşların bazıları bu kotadan muaf olarak vize alabiliyorlar.

H-1B vizesi belli bir şirketin sponsorluğunda alınsa da, iş değiştirmek isterseniz başka bir şirket bu vizeyi transfer ederek sizi işe alabiliyor. Bu sıfırdan vize almak kadar zor bir olay değil, yukarıda bahsettiğim kotadan da etkilenmiyor. Bir kere vizeyi aldıktan sonra uzatma ve transfer işlemlerinde kotaya tabi olmuyorsunuz, ancak yine de geçmek istediğiniz şirketin bu transferi yapması ek bir yük olduğu için her şirket bunu yapmıyor. Mülakatlar sırasında insan kaynakları ve işe alım müdürü ile görüşürken bunu mutlaka teyit etmenizi öneririm.

H-1B vizesi size 6 senelik bir çalışma hakkı tanıyor. İlk seferde 3 senelik bir vize alıyorsunuz, sonrasında tekrar 3 seneliğine yenileyebiliyorsunuz. Vizenizi başka bir şirkete transfer ettirseniz de süre baştan başlamıyor, toplam süre 6 sene. Eğer 6 sene dolmadan yeşil kart (green card) başvurusu yaparsanız, yeşil kartınız çıkana kadar yine ek uzatma alabiliyorsunuz. Aksi taktirde bu sürenin sonunda çalışma hakkınız dolmuş oluyor ve tekrar başvurabilmek için en az bir yıl süreyle ABD dışında yaşamanız gerekiyor

L1

L1 vizesi yine şirket sponsorluğu ile alınan bir vize ancak H-1B ile çok farklı. Eğer ABD’de iş yapan bir şirketin ABD dışındaki bir ofisinde çalışıyorsanız, şirket size L1 vizesi alarak ABD ofisine taşıyabiliyor. Tabi her çalışan bu olanaktan faydalanamıyor. Şirkette belli bir süre çalışmış olmanız ve belli bir alanda uzmanlaşmış olmanız olmanız gerekiyor. Bunun başka kuralları da var tabii ki ama genel olarak özellikle Amazon, Microsoft gibi büyük şirketler bu yolla çok sayıda çalışanını ABD’ye getiriyor. Bunun da aslında iki çeşidi var. L1-A yönetici pozisyonundaki kişileri ABD’ye transfer etmek kullanılıyor ve 7 seneye kadar uzatılabiliyor. L1-B ise diğer pozisyonlar için geçerli oluyor ve 5 seneye kadar uzatılabiliyor. Ek olarak, eğer ABD dışında iş yapan bir şirketiniz varsa ve ABD’de bir ofis açmak istiyorsanız yine bu vizeden faydalanarak eleman göndermek mümkün olabiliyor.

Bu vizenin H-1B’den farklı başka tarafları da var. İlk olarak L1 vizesi alıyorsanız H-1B’de olduğu gibi bir kota veya çekiliş falan yok. Çalıştığınız şirket ve siz çalışan olarak gerekli şartları sağlıyorsanız bu mümkün olabiliyor. Ancak işin kötü tarafı ABD’ye geldikten sonra aynı şirkette çalışmak zorundasınız. H-1B’de olduğu gibi transfer ettirip başka bir şirkete geçeyim diyemiyorsunuz. Başka bir şirkete geçmeniz için şirketin size H1-B veya yeşil kart alması gerekiyor.

Ve diğerleri

Şimdiye kadar bahsettiğimiz vize türleri en yaygın kullanılanlar ancak bundan çok daha fazlası var. Örneğin bir şirket sahibi veya yatırımcı iseniz ve ABD’de istihdam yaratacak bir iş fikriniz varsa E sınıfı vizeler, üstün yetenekli bir atlet, bilim adamı veya sanatçı iseniz O sınıfı vizeler mevcut. Daha fazla bilgi için bu adrese bakabilirsiniz.

Tekrar söylemek istiyorum ki burada anlatmaya çalıştıklarım tamamen bilgilendirme amaçlı ve kulak dolgunluğu olması açısından faydalı olabilir. Her biri için karmaşık süreçlerden geçmeniz gerekiyor ve zaten bu vizeleri almak için şirket avukatları ile çalışıyorsunuz. Onlar sizi daha doğru yönlendirecektir.

Dikkat ederseniz bu çalışma vizelerinin hepsinde bir zaman sınırı var. Zaten bunlar geçici işçi kategorisinde belirli bir süre için verilen haklar. Eğer siz ABD’de kalıcı olmak istiyorsanız yeşil kart almanız gerekiyor. Bunun da çeşitli yolları var, bir sonraki yazıda bunu konuşalım.

Kaynakça

https://www.ice.gov/sites/default/files/documents/Document/2016/stem-list.pdf

https://www.uscis.gov/working-in-the-united-states/temporary-nonimmigrant-workers

https://www.uscis.gov/working-in-the-united-states/temporary-workers/h-1b-specialty-occupations-dod-cooperative-research-and-development-project-workers-and-fashion

https://www.uscis.gov/working-in-the-united-states/students-and-exchange-visitors/optional-practical-training-opt-for-f-1-students

Share

Effective Java Madde 9: try-finally Yerine try-with-resources Tercih Edin

Java kütüphaneleri yazılımcının close metodunu çağırarak kapatması gereken birçok kaynak barındırır. Bunlara örnek olarak InputStream, OutputStream ve java.sql.Connection verilebilir. Bu kaynakları kapatmak (serbest bırakmak), istemciler tarafından sıklıkla unutulur ve bu durum ciddi performans sorunlarına yol açar. Bu kaynaklar her ne kadar finalizer (sonlandırıcı) kullanarak istemci tarafında yapılacak hatalara bir önlem almaya çalışsalar da, pratikte biz sonlandırıcıların iyi çalışmadığını biliyoruz. (Madde 8)

Önceleri, try-finally ifadesi kullandığımız kaynakların bir istisna (exception) fırlatıldığında dahi doğru biçimde kapatılmasını garanti eden en iyi yoldu.

// try-finally - Artık kaynakları kapatmanın en iyi yolu değil!
static String firstLineOfFile(String path) throws IOException { 
    BufferedReader br = new BufferedReader(new FileReader(path)); 
    try {
        return br.readLine();
    } finally {
        br.close();
    }
}

Bu çok da kötü görünmüyor, ancak ikinci bir kaynak daha eklediğimizde durum kötüleşiyor.

// try-finally birden fazla kaynakla kullanılınca kod çirkinleşiyor
static void copy(String src, String dst) throws IOException {
    InputStream in = new FileInputStream(src);
    try {
        OutputStream out = new FileOutputStream(dst);
        try {
            byte[] buf = new byte[BUFFER_SIZE];
            int n;
            while ((n = in.read(buf)) >= 0) { 
                out.write(buf, 0, n);
            }
        } finally {
            out.close();
        }
    } finally {
        in.close();
    }
}   

İnanması zor olabilir ama, iyi programcılar bile çoğu zaman bunu yanlış kullanmaktadır. Örneğin, Java Puzzlers kitabının 88. sayfasında ben de hata yaptım ve yıllarca hiç kimse fark etmedi. Dahası, 2007 yılında Java kütüphanelerindeki close metodu kullanımlarının üçte ikisi yanlıştı.

try-finally blokları doğru kullanılarak kod yazıldığı durumlarda bile (yukarıdaki iki örnek gibi), ortada küçük de olsa bir sorun bulunmaktadır. Hem try hem de finally bloklarındaki kodların istisna fırlatma ihtimali bulunmaktadır. Örneğin, ilk örnekteki firstLineOfFile metodunda, try bloğundakireadLine çağrısı fiziksel aygıttaki olası bir problemden dolayı istisna fırlatabilir, finally içerisindeki close çağrısı da aynı sebepten dolayı başarısız olabilir. Bu durumda, ikinci fırlatılan istisna birinciyi tamamen görünmez kılacaktır. Stack trace içerisinde birinci istisna görülmeyecektir, bu da problemi çözmeye çalışan kişileri çok zor durumda bırakacaktır. Çünkü genellikle bir sorunu çözmeye çalışırken ilk hatanın nereden kaynaklandığını görmek önemlidir. Bu sorunu çözmek için yukarıda verilen kodları geliştirmek mümkündür, ancak sonuçta oluşan kod daha karmaşık olduğu için bunu genellikle kimse yapmaz.

Bütün bu problemler Java 7 ile birlikte gelen try-with-resources ifadesiyle çözülmüştür. Bu ifadeyi kullanabilmek için kapatılması gereken kaynakların, void geri döndüren tek bir close metodu içeren AutoClosable arayüzünü uygulaması gerekmektedir. Java kütüphanelerindeki birçok sınıf ve arayüz bugün bu arayüzü kullanmaktadır. Eğer siz de kapatılması gereken bir kaynağı temsil eden bir sınıf yazarsanız, AutoClosable arayüzünü mutlaka uygulamalısınız.

Yukarıda verdiğimiz birinci örneğin try-with-resources ile kullanımı aşağıdaki gibi olacaktır.

// try-with-resources - kaynakları kapatmanın en iyi yolu!
static String firstLineOfFile(String path) throws IOException {
  try (BufferedReader br = new BufferedReader(new FileReader(path))) {
    return br.readLine();
  } 
}

Ve bu da ikinci örneğimizin try-with-resources ile yazılışı:

// try-with-resources birden fazla kaynakla kullanımı 
static void copy(String src, String dst) throws IOException {
    try (InputStream   in = new FileInputStream(src);
         OutputStream out = new FileOutputStream(dst)) {
        
        byte[] buf = new byte[BUFFER_SIZE];
        int n;
        while ((n = in.read(buf)) >= 0) {
            out.write(buf, 0, n);
        }
    }
}

Burada gördüğünüz gibi, istemcinin ayrıca close metodunu çağırmasına gerek kalmamaktadır. try-with-resources kullanıldığında AutoClosable arayüzünden gelen close metodu otomatik olarak çağrılmakta ve istemci tarafında yapılacak hatalara karşı önlem alınmaktadır.

try-with-resources ifadesiyle yazılan kodlar daha kısa ve okunabilir olmasının yanında, hataların teşhisini de kolaylaştırmaktadır. firstLineOfFile metodunu düşünecek olursak, eğer hem readLine metodu hem de görünmez close metodu istisna fırlatırsa, ikinci istisna birinciyi görünmez kılmaz, tam tersine birinci görülebilsin diye ikinci gizlenir (suppressed). Hatta ikiden daha fazla istisna fırlatıldığı durumlarda birden çok istisna da gizlenebilir. Çünkü yazılımcının ilk oluşan hatayı görebilmesi hatanın teşhisi açısından önemlidir. Burada saklanan istisnalar da aslında kaybolmazlar, stack trace içerisinde yine görülebilirler ancak gizlendiklerine dair bir ibare yer alır. Hatta bunlara Java 7’de Throwable sınıfına eklenen getSuppressed metoduyla programatik olarak da erişmek mümkündür.

try-with-resources kullanırken aynen try-finally kullanırken olduğu gibi catch blokları eklemek de mümkündür. Bu, sizlere iç içe katmanlar eklemenize gerek kalmadan kodunuzda oluşabilecek istisnaları ele almanızı sağlar. Pratikte kullanımı pek mantıklı gözükmese de, ilk örneğimizi aşağıdaki gibi değiştirerek istisna fırlatmak yerine, veri okumada bir hata oluştuğunda varsayılan bir değeri döndürecek şekilde yazabiliriz.

// try-with-resources catch bloğuyla kullanımı
static String firstLineOfFile(String path, String defaultVal) {
  try (BufferedReader br = new BufferedReader(new FileReader(path))) {
    return br.readLine();
  } 
  catch (IOException e) {
    return defaultVal;
  } 
}

Buradaki ders çok net: kapatılması gereken kaynaklarla çalışırken try-finally yerine try-with-resources ifadesini kullanmalıyız. Bu sayede ortaya çıkan kod çok daha kısa ve anlaşılır olacaktır, oluşabilecek hatalar sonucunda da teşhis yapmamız kolaylaşacaktır. Bu yeni yöntem, try-finally ile yazılması çok zor ve zahmetli olan kod parçalarının doğru biçimde yazılmasını son derece kolaylaştırmaktadır.

Share